端口错误,同时将chrome扩展从manifest v1更改为v2
在尝试将扩展从manifest 1版本移植到版本2时,出现:
端口错误:无法build立连接。 接收结束不存在。 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
包含最初放置在background.htm
的<script>
标记中的<script>
。
内联事件侦听器
浏览器动作popup窗口,应用程序启动器,选项页面等通常包含内联事件侦听器。 通过CSP,这些也是被禁止的。
<button onclick="test();">
不起作用 。 解决方法是使用addEventListener
将事件添加到外部JS文件中。 查看文档或此答案的示例。
其他
- 从string(
eval
,Function
,setTimeout
,…)创buildJavaScript是禁止的。 重写代码以避免从string创build代码,或使用沙箱清单选项 (在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'",
官方文件
官方文档还提供了有关该主题的出色说明,请参阅“教程:迁移到清单V2” 。
对我来说,解决scheme正在改变
<script type="text/javascript" src="bgScript.js"></script>
至:
<script src="bgScript.js"></script>
也许这也是帮助别人!