在尝试将扩展从清单版本 1 移植到版本 2 时,出现以下情况:
端口错误:无法建立连接。接收端不存在。chromeHidden.Port.dispatchOnDisconnect miscellaneous_bindings:232
这出现在开发人员工具的控制台中。我不知道从哪里开始解决这个问题,因为我不知道是什么导致它开始......
什么会导致这个问题?有没有办法确切地知道是什么原因造成的?谢谢。
在尝试将扩展从清单版本 1 移植到版本 2 时,出现以下情况:
端口错误:无法建立连接。接收端不存在。chromeHidden.Port.dispatchOnDisconnect miscellaneous_bindings:232
这出现在开发人员工具的控制台中。我不知道从哪里开始解决这个问题,因为我不知道是什么导致它开始......
什么会导致这个问题?有没有办法确切地知道是什么原因造成的?谢谢。
最可能的失败原因是默认内容安全策略在活动时"manifest_version": 2
的激活。默认 CSP 的结果是不会执行内联 JavaScript。
<script>chrome.extension.onConnect.addListener(...);</script>
上一行是内联代码的示例。解决办法是把脚本放在一个外部的JS文件中:
<script src="script.js"><!--original contents moved to script.js--></script>
当您使用背景页面时,请勿使用:
"background_page": "background.htm"
, 或者 "background": {"page": "background.htm"}
,"background": {"scripts": ["background.js"]}
background.js
包含最初放置在<script>
标签中的脚本background.htm
。浏览器操作弹出窗口、应用程序启动器、选项页面等通常包含内联事件侦听器。通过 CSP,这些也是被禁止的。
<button onclick="test();">
不工作。解决方案是在外部 JS 文件中使用addEventListener
. 查看文档或此答案以获取示例。
eval
禁止从字符串 ( , Function
, setTimeout
, ...)创建 JavaScript 。重写您的代码以不从字符串创建代码,或使用沙盒清单选项(在 Chrome 21 中引入)。从 Chrome 22开始,可以使用unsafe-eval
CSP 策略解除此限制。JSONP不起作用,因为无法在扩展的上下文中加载外部 (JavaScript) 资源。使用普通XMLHttpRequest
而不是 JSONP(更多信息 + 示例)。
唯一的例外是当资源https
不是通过 http获取时。可以调整 CSP 以引入此异常 -请参阅文档:
"content_security_policy": "script-src 'self' https://example.com; object-src 'self'",
官方文档也对该主题提供了很好的解释,请参阅“教程:迁移到 Manifest V2”。
对我来说,解决方案正在改变:
<script type="text/javascript" src="bgScript.js"></script>
到:
<script src="bgScript.js"></script>
也许它也帮助别人!