gpt4 book ai didi

google-chrome-extension - 将 chrome 扩展名从 list v1 更改为 v2 时出现端口错误

转载 作者:行者123 更新时间:2023-12-02 05:05:19 25 4
gpt4 key购买 nike

在尝试将扩展从 list 版本 1 移植到版本 2 时,出现了:

Port error: Could not establish connection. Receiving end does not exist. chromeHidden.Port.dispatchOnDisconnect miscellaneous_bindings:232

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

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

最佳答案

失败的最可能原因是在 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> 处的 background.htm 标记内的脚本。

内联事件监听器

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

<button onclick="test();"> 不起作用。解决方案是使用 addEventListener 外部 JS 文件 中添加事件。看看 the documentationthis answer 的例子。

其他

  • 禁止从字符串( eval FunctionsetTimeout ……)创建 JavaScript。重写您的代码以不从字符串创建代码,或使用 sandbox manifest option(在 Chrome 21 中引入)。 Since Chrome 22 , unsafe-eval CSP policy 可以用来解除这个限制。
  • JSONP 不起作用,因为无法在扩展的上下文中加载外部 (JavaScript) 资源。使用普通的 XMLHttpRequest 而不是 JSONP ( more information + example )。
    唯一的异常(exception)是资源是通过 https 不是 http 获取的。可以调整 CSP 以引入此异常 - see documentation:

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

官方文档

官方文档也提供了关于该主题的出色解释,请参阅 "Tutorial: Migrate to Manifest V2"

关于google-chrome-extension - 将 chrome 扩展名从 list v1 更改为 v2 时出现端口错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12320371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com