端口错误,同时将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( evalFunctionsetTimeout ,…)创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> 

也许这也是帮助别人!