javascript - 如何拥有后台脚本和类似于默认弹出窗口的东西?

标签 javascript google-chrome-extension

因此,我知道您不能同时拥有后台脚本和默认弹出窗口。如果是这样,我怎样才能拥有类似于默认弹出窗口的内容(当您单击扩展程序的图标时会出现一些简单的 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_popup 设置)和背景页面。背景页面将有自己的生命周期("persistent": falseEvent page )并且弹出窗口只要打开就会存在。

我想您的困惑源于您不能同时拥有弹出窗口和 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);
  }
});

如果把上面的弹窗代码放在顶层,那么弹窗一打开,后台就会通知

虽然您可以直接从后台访问弹出窗口(参见 chrome.extension.getViews ),但建议您将 UI 逻辑移至弹出窗口本身并使用 Messaging 与后台通信如上所述并分享chrome.storage .

关于javascript - 如何拥有后台脚本和类似于默认弹出窗口的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31377325/

相关文章:

javascript - 等待所有不同的 promise 完成 nodejs(异步等待)

javascript - 使用 jQuery ui-sortable 的 Jumble Word 游戏

JavaScript 对象对于所有版本的 Google Chrome 都是唯一的?

javascript - 如何修复 chrome-extension 内联 JavaScript 调用错误?

javascript - chrome 扩展程序重新加载后无法发送消息

JavaScript 正则表达式匹配法国车牌

javascript - iCheck 插件 - ifToggled 取消事件

Javascript:如何有选择地将字符串转换为各自的unicode值,加1,然后转换回字符串?

JavaScript:4 个异步函数在继续之前按顺序等待彼此完成?

javascript - Chrome 扩展 "Cannot read property ' onUpdated' of undefined"