我正在开发一个Chrome扩展程序,这是一个问题.在我inject.js
,我提出的请求如下:
chrome.extension.sendRequest({command:'skip'},callback)
Run Code Online (Sandbox Code Playgroud)
在我的`background.js中,我只是添加一个请求监听器,如:
chrome.extension.onrequest.addListener(function(req,sender,res){console.log("procession"})
Run Code Online (Sandbox Code Playgroud)
但是有一个错误:
端口错误:无法建立连接.接收端不存在
这似乎是Chrome中的一个bug?PS:
我的manifest.json的一部分
"background": {
"scripts": ["background.js"]
},
"content_scripts": [
{
"matches": ["< all_urls >"],
"js": ["inject.js"]
}
],
Run Code Online (Sandbox Code Playgroud)
我在Chromium 17,我尝试重新加载扩展程序,重新打开浏览器......没有发生任何事情,
有人得到一些想法?
安装或升级我正在处理的Chrome扩展程序后,不会重新注入内容脚本(在清单中指定),因此需要页面刷新才能使扩展能够正常工作.有没有办法强制脚本再次注入?
我相信我可以通过从清单中删除它们然后处理在后台页面中注入哪些页面来以编程方式再次注入它们,但这不是一个好的解决方案.
我不想自动刷新用户的标签,因为这可能会丢失一些数据.安装或升级扩展时,Safari会自动刷新所有页面.
发布更新后,我正在尝试为Chrome扩展程序的用户提供流畅的体验。
我在应用程序更新时重新注入了内容脚本,即使用户继续在扩展程序更新后未刷新的页面上继续使用我的扩展程序,我的功能也起作用。刷新页面是理想的选择,但是我不想强迫用户使用。
但是,在扩展程序更新之后,但在代码尝试从内容脚本/页面发送消息到后台页面时,在刷新页面之前,我的内容脚本控制台(将内容脚本插入的页面)中出现以下错误:
未捕获的错误:扩展上下文无效。
有办法“重建”连接吗?我尝试了长期使用的端口和常规消息传递-更新扩展具有相同的效果。
任何想法/方向表示赞赏。
这是我的简单消息传递代码(在内容脚本中),引发错误...但是可以与后台脚本进行通信:
chrome.runtime.sendMessage({ msg: "recordFeedback", obj: commentObj, source: source}, function(response){
console.log('Sent to DB...response was: ', response, response.recordFeedbackResponse);
});
Run Code Online (Sandbox Code Playgroud)