Javascript Firefox插件:(本机应用程序和内容脚本和后台脚本)消息传递

Javascript Firefox插件:(本机应用程序和内容脚本和后台脚本)消息传递,javascript,firefox-addon,firefox-addon-webextensions,Javascript,Firefox Addon,Firefox Addon Webextensions,我正在开发一个简单的插件,它可以解析一个页面的文本,例如twitter.com,然后向它发送一个外部脚本并接收响应。 我当前的工作流程如下所示: 从内容脚本连接到后台脚本 然后从后台脚本连接到本机应用程序并接收响应 格式化响应并将其传递给内容脚本,该脚本最终可以对DOM进行更改 连接到后台脚本时,我收到以下错误。 错误: 错误:尝试在断开连接的端口上发送邮件 当错误出现在content.js:10:17行时,即: myPort.postMessage({idx:i,str:“他们点击了页面!”

我正在开发一个简单的插件,它可以解析一个页面的文本,例如twitter.com,然后向它发送一个外部脚本并接收响应。 我当前的工作流程如下所示:

  • 从内容脚本连接到后台脚本

  • 然后从后台脚本连接到本机应用程序并接收响应

  • 格式化响应并将其传递给内容脚本,该脚本最终可以对DOM进行更改

  • 连接到后台脚本时,我收到以下错误。 错误:

    错误:尝试在断开连接的端口上发送邮件
    
    当错误出现在
    content.js:10:17
    行时,即:

    myPort.postMessage({idx:i,str:“他们点击了页面!”);
    
    我无法解决此错误

    content.js

    console.log(“已加载!”);
    var currentTweetIndex=0;
    var tweets=null;
    var myPort=browser.runtime.connect({name:“来自cs的端口”})//连接到后台脚本
    //postMessage({str:“来自内容脚本的hello”});
    函数分析器weets(){
    tweets=document.getElementsByClassName('tweet-text');
    对于(var i=0;i
    background.js

    /*启动时,连接到“乒乓”应用程序*/
    var port=browser.runtime.connectNative(“乒乓球”);
    var portFromCS;//来自内容脚本的连接
    /*侦听来自本机应用程序的消息*/
    port.onMessage.addListener((响应)=>{
    控制台日志(“接收:+响应”);
    postMessage({tweet_类:“有毒”,idx:1});
    //向内容脚本发送响应
    });
    /*单击浏览器操作时,向应用程序发送消息*/
    browser.browserAction.onClicked.addListener(()=>{
    log(“发送:pinggasdfasdfas”);
    port.postMessage(“已测试!”);
    });
    ////////////////////////////////////////////////////////////////////
    ///侦听来自内容脚本的连接
    功能连接(p){
    portFromCS=p;
    portFromCS.onMessage.addListener(函数(m){
    log(“>在后台脚本中,从内容脚本接收消息”)
    控制台日志(m);
    港口邮递信息(m);
    });
    }
    browser.runtime.onConnect.addListener(已连接);
    //browser.browserAction.onClicked.addListener(函数(){
    //postMessage({tweet_类:“有毒”,idx:1});
    //});
    
    manifest.json

    {
    “说明”:“本机消息传递示例插件”,
    “清单版本”:2,
    “名称”:“本机消息传递示例”,
    “版本”:“1.0”,
    “图标”:{
    “48”:“icons/message.svg”
    },
    “应用程序”:{
    “壁虎”:{
    “id”:“ping”_pong@example.org",
    “严格的最低版本”:“50.0”
    }
    },
    “背景”:{
    “脚本”:[“background.js”]
    },
    “内容脚本”:[
    {
    “匹配项”:[“*://*.twitter.com/*”],
    “js”:[“content.js”]
    }
    ],
    “浏览器操作”:{
    “默认图标”:“icons/message.svg”
    },
    “权限”:[“nativeMessaging”]
    }
    
    显然,上述逻辑是有效的。问题是,在任何更改后加载加载项后,我们需要重新加载选项卡以设置本机应用程序+后台脚本+内容脚本之间的连接,否则会抛出上述错误