Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从弹出脚本到内容脚本的WebExtension消息_Javascript_Firefox_Firefox Addon Webextensions_Content Script - Fatal编程技术网

Javascript 从弹出脚本到内容脚本的WebExtension消息

Javascript 从弹出脚本到内容脚本的WebExtension消息,javascript,firefox,firefox-addon-webextensions,content-script,Javascript,Firefox,Firefox Addon Webextensions,Content Script,我不熟悉Firefox扩展。单击按钮时,我试图从弹出脚本向内容脚本发送消息,但收到以下错误: Could not establish connection. Receiving end does not exist. 我没有收到任何其他错误,因此我不确定为什么会发生此错误 弹出脚本: document.getElementById("rec").addEventListener("click", (e) => { var query = browser.tabs.query({c

我不熟悉Firefox扩展。单击按钮时,我试图从弹出脚本向内容脚本发送消息,但收到以下错误:

Could not establish connection. Receiving end does not exist.
我没有收到任何其他错误,因此我不确定为什么会发生此错误

弹出脚本:

document.getElementById("rec").addEventListener("click", (e) => {
    var query = browser.tabs.query({currentWindow: true, active : true});
    var tab = query.then(getTab,onError);

    function getTab(tabs) {
        for (let tab of tabs){
            send(tab.id);
        }
    }

    function onError(error) {
      console.log(`Error: ${error}`);
    }

    function send(tab){
        browser.tabs.executeScript(tab, {
        file: "/content_scripts/recorder.js",})
        .then(function () { browser.tabs.sendMessage(tab, {record: "start"}) })
        .catch(console.error.bind(console));
    }
});
内容脚本:

(function() {
    if (window.hasRun) {
        return;
    }
    window.hasRun = true;

    browser.runTime.onMessage.addListener(notify);
    function notify(message){
        alert(message.record);
    }
})();
manifest.json:

{

  "manifest_version": 2,
  "name": "TW Recorder",
  "version": "1.0",

  "description": "Recorder.",

  "icons": {
    "48": "icons/border-48.png"
  },
  "permissions": [
    "<all_urls>",
    "activeTab",
    "tabs",
    "storage",
    "webRequest"
  ],
  "browser_action": {
    "default_icon": "icons/border-48.png",
    "default_title": "Recorder",
    "default_popup": "popup/main.html"
      },

  "content_scripts": [
    {
      "matches": ["<all_urls>"],
      "js": ["content_scripts/jquery-3.3.1.min.js","content_scripts/recorder.js"]
    }
  ]

}
{
“清单版本”:2,
“名称”:“TW记录器”,
“版本”:“1.0”,
“说明”:“记录器”,
“图标”:{
“48”:“icons/border-48.png”
},
“权限”:[
"",
“活动标签”,
“标签”,
“存储”,
“webRequest”
],
“浏览器操作”:{
“默认图标”:“icons/border-48.png”,
“默认标题”:“录音机”,
“默认弹出窗口”:“popup/main.html”
},
“内容脚本”:[
{
“匹配项”:[“”],
“js”:[“content\u scripts/jquery-3.3.1.min.js”,“content\u scripts/recorder.js”]
}
]
}

更正的内容脚本(将运行时更改为运行时):

(function() {
    if (window.hasRun) {
        return;
    }
    window.hasRun = true;

    browser.runtime.onMessage.addListener(notify);
    function notify(message){
        alert(message.record);
    }
})();