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

Rey*_*yno 4 google-chrome-extension

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

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

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

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

Rob*_*b W 10

失败的最可能的原因是激活默认的内容安全策略"manifest_version": 2是有效的.默认CSP的结果是不会执行内联JavaScript.

<script>chrome.extension.onConnect.addListener(...);</script>
Run Code Online (Sandbox Code Playgroud)

上一行是内联代码的示例.解决方案是将脚本放在外部JS文件中:

<script src="script.js"><!--original contents moved to script.js--></script>
Run Code Online (Sandbox Code Playgroud)

背景页面/脚本

当你使用背景的网页,就不能使用:

  • "background_page": "background.htm", 要么
  • "background": {"page": "background.htm"},
  • "background": {"scripts": ["background.js"]}
    其中background.js包含最初放置在<script>标签中的脚本background.htm.

内联事件侦听器

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

<button onclick="test();"> 不起作用.解决方案是使用外部JS文件添加事件addEventListener.有关示例,请查看文档此答案.

其他

官方文件

官方文档还提供了有关该主题的出色解释,请参阅"教程:迁移到Manifest V2".