为了账号安全,请及时绑定邮箱和手机立即绑定

将Chrome扩展名从清单v1更改为v2时出现端口错误

/ 猿问

将Chrome扩展名从清单v1更改为v2时出现端口错误

炎炎设计 2019-10-22 22:07:04

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


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


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


什么会导致此问题?并且有某种方式确切地知道是什么原因造成的吗?谢谢。


查看完整描述

3 回答

?
慕田峪4524236

失败的最可能的原因是激活默认的内容安全策略时"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。请查看文档或此答案作为示例。


其他

从字符串的JavaScript创建(eval,Function,setTimeout,...)是被禁止的。重写代码以不使用字符串创建代码,或者使用沙盒清单选项(Chrome 21中引入)。从Chrome 22开始,可以使用unsafe-evalCSP策略解除此限制。

JSONP不起作用,因为无法在扩展程序的上下文中加载外部(JavaScript)资源。使用普通XMLHttpRequest而不是JSONP(更多信息+ example)。

唯一的例外是,资源https不是通过http获取的。可以调整CSP以引入此异常- 请参阅文档:


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

官方文件

官方文档还提供了关于该主题的出色说明,请参阅“教程:迁移到清单V2”。


查看完整回答
反对 回复 2019-10-22
?
万千封印

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


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

至:


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

也许它也可以帮助别人!


查看完整回答
反对 回复 2019-10-22
?
MM们

确实是我在这里阅读答案之前所做的,但是我确实阅读了您添加到其他问题的答复,这些答复使我不得不这样做。删除内联JavaScript之后,我的扩展程序现在可以工作了。但是“端口错误”仍然存在。我将其标记为答案,因为这正是将扩展程序从清单v1移植到v2后使我的扩展程序正常工作的原因。我将检查我的代码了解我是否错过了更多内联。我现在有包含内联JavaScript(包括诸如onclick之类的事件)的popup.html  popup.js。将js包含在html文件中。谢谢罗伯。我会发布任何更新(如果有)

查看完整回答
反对 回复 2019-10-22

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信