Javascript 如何拥有背景脚本和类似于默认弹出窗口的东西?

Javascript 如何拥有背景脚本和类似于默认弹出窗口的东西?,javascript,google-chrome-extension,Javascript,Google Chrome Extension,因此,我理解您不能同时拥有后台脚本和默认弹出窗口。如果是这样的话,我怎么能有一个类似于默认弹出窗口的东西(当你点击扩展图标时会出现一些简单的HTML),并让背景脚本修改弹出窗口的内容 这是manifest.json "browser_action": { "default_title": "Mark this position!", "default_icon": "icon.png" }, "background": { "scripts": ["background.

因此,我理解您不能同时拥有后台脚本和默认弹出窗口。如果是这样的话,我怎么能有一个类似于默认弹出窗口的东西(当你点击扩展图标时会出现一些简单的HTML),并让背景脚本修改弹出窗口的内容

这是manifest.json

"browser_action": {
    "default_title": "Mark this position!",
    "default_icon": "icon.png"
},
"background": {
    "scripts": ["background.js"],
    "persistent": false
},
"content_scripts": [
    {
        "matches": [
            "http://*/*",
            "https://*/*"
        ],
        "js": ["content.js"]
    }
],

您完全可以同时拥有一个弹出窗口(即
default\u popup
set)和一个背景页面。后台页面将有其自己的生命周期(带有
“persistent”:false,它是一个窗口),只要打开,弹出窗口就会存在

我猜你的困惑源于这样一个事实:你不能同时拥有一个弹出窗口和一个
chrome.browserAction.onClicked
监听器

这是真的,但是还有其他方法可以告诉你的背景页面弹出窗口已经打开

您可以从弹出窗口向背景页面发送消息:

// popup.js, should be included in the popup
chrome.runtime.sendMessage({popupOpen: true}, function(response) {
  /* process response */
});

// background.js
chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) {
  if(message.popupOpen) {
    /* do stuff */
    sendResponse(response);
  }
});
如果您将上述弹出代码置于顶层,则弹出窗口一打开,就会立即通知后台


虽然您可以从后台直接访问弹出窗口(请参阅),但建议您将UI逻辑移动到弹出窗口本身,并使用如上所述和共享与后台通信。

您错了!您可以在一个扩展中同时使用背景脚本和默认弹出窗口。我想您想说的是,在弹出窗口或背景页面中,一次只有一个是活动的?