将chrome扩展从清单v1更改为v2时发生端口错误

时间:2012-08-11 09:40:00

标签: google-chrome-extension

尝试将扩展程序从清单版本1移植到版本2时,会出现:

  

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

这在开发人员工具中出现在Console中。我不知道从哪里开始修复这个原因我不知道是什么导致它开始..

什么可能导致这个问题?并且有什么方法可以确切知道是什么导致了它? 谢谢。

2 个答案:

答案 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 documentationthis answer

其他

  • 禁止从字符串( <button onclick="test();"> evalFunction,...)创建JavaScript。重写您的代码以不从字符串创建代码,或使用sandbox manifest option(在Chrome 21中引入)。 Since Chrome 22unsafe-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>

也许它也会帮助别人!