4

在尝试将扩展从清单版本 1 移植到版本 2 时,出现以下情况:

端口错误:无法建立连接。接收端不存在。chromeHidden.Port.dispatchOnDisconnect miscellaneous_bindings:232

这出现在开发人员工具的控制台中。我不知道从哪里开始解决这个问题,因为我不知道是什么导致它开始......

什么会导致这个问题?有没有办法确切地知道是什么原因造成的?谢谢。

4

2 回答 2

10

最可能的失败原因是默认内容安全策略在活动时"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"]}
    wherebackground.js包含最初放置在<script>标签中的脚本background.htm

内联事件侦听器

浏览器操作弹出窗口、应用程序启动器、选项页面等通常包含内联事件侦听器。通过 CSP,这些也是被禁止的。

<button onclick="test();"> 不工作。解决方案是在外部 JS 文件中使用addEventListener. 查看文档此答案以获取示例。

其他

  • eval禁止从字符串 ( , Function, setTimeout, ...)创建 JavaScript 。重写您的代码以不从字符串创建代码,或使用沙盒清单选项(在 Chrome 21 中引入)。从 Chrome 22开始,可以使用unsafe-evalCSP 策略解除此限制。
  • JSONP不起作用,因为无法在扩展的上下文中加载外部 (JavaScript) 资源。使用普通XMLHttpRequest而不是 JSONP(更多信息 + 示例)。
    唯一的例外是当资源https不是通过 http获取时。可以调整 CSP 以引入此异常 -请参阅文档

    "content_security_policy": "script-src 'self' https://example.com; object-src 'self'",
    

官方文档

官方文档也对该主题提供了很好的解释,请参阅“教程:迁移到 Manifest V2”

于 2012-08-11T12:41:15.780 回答
0

对我来说,解决方案正在改变:

<script type="text/javascript" src="bgScript.js"></script>

到:

<script src="bgScript.js"></script>

也许它也帮助别人!

于 2012-11-26T13:09:30.400 回答