尝试将扩展程序从清单版本1移植到版本2时,会出现:
端口错误:无法建立连接。接收端没有 存在。 chromeHidden.Port.dispatchOnDisconnect miscellaneous_bindings:232
这在开发人员工具中出现在Console中。我不知道从哪里开始修复这个原因我不知道是什么导致它开始..
什么可能导致这个问题?并且有什么方法可以确切知道是什么导致了它? 谢谢。
答案 0 :(得分:10)
失败的最可能原因是default Content security policy处于活动状态时激活"manifest_version": 2
。默认CSP的结果是inline JavaScript will not be executed。
<script>chrome.extension.onConnect.addListener(...);</script>
上一行是内联代码的示例。解决方案是将脚本放在外部JS文件中:
<script src="script.js"><!--original contents moved to script.js--></script>
当您使用background pages时,请不使用:
"background_page": "background.htm"
或"background": {"page": "background.htm"}
,"background": {"scripts": ["background.js"]}
background.js
包含最初放置在<script>
的{{1}}标记内的脚本。浏览器操作弹出窗口,应用程序启动器,选项页面等通常包含内联事件侦听器。通过CSP,这些也是被禁止的。
background.htm
不起作用。解决方案是使用 addEventListener
在外部JS文件中添加事件。有关示例,请查看the documentation或this answer。
<button onclick="test();">
,eval
,Function
,...)创建JavaScript。重写您的代码以不从字符串创建代码,或使用sandbox manifest option(在Chrome 21中引入)。 Since Chrome 22,unsafe-eval
CSP policy可用于解除此限制。 JSONP 不起作用,因为外部(JavaScript)资源无法在扩展程序的上下文中加载。使用普通setTimeout
代替JSONP(more information + example)
唯一的例外是通过XMLHttpRequest
而不是http 获取资源的时间。可以调整CSP以引入此异常 - see documentation:
https
官方文档还提供了有关该主题的出色解释,请参阅"Tutorial: Migrate to Manifest V2"。
答案 1 :(得分:0)
对我而言,解决方案正在改变:
<script type="text/javascript" src="bgScript.js"></script>
为:
<script src="bgScript.js"></script>
也许它也会帮助别人!