Javascript Firefox插件:(本机应用程序和内容脚本和后台脚本)消息传递
我正在开发一个简单的插件,它可以解析一个页面的文本,例如twitter.com,然后向它发送一个外部脚本并接收响应。 我当前的工作流程如下所示: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:“他们点击了页面!”
错误:尝试在断开连接的端口上发送邮件
当错误出现在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”]
}
显然,上述逻辑是有效的。问题是,在任何更改后加载加载项后,我们需要重新加载选项卡以设置本机应用程序+后台脚本+内容脚本之间的连接,否则会抛出上述错误