【问题标题】:Chrome Extension BackgroundScript PathChrome 扩展后台脚本路径
【发布时间】:2018-04-11 10:50:40
【问题描述】:

我正在尝试从 Chrome 扩展程序中 manifest.json 中的 cdn 路径 ('https://cdn.xyz.com/scripts/background.js') 加载后台脚本,但它给我带来了错误 - 无法加载后台脚本“https://cdn.xyz.com/scripts/background.js。我已经在 manifest.json 文件的 content_security_policy 中添加了https://cdn.xyz.com

Manifest.json

{
    "name": "MyExtension",
    "manifest_version": 2,
    "background": {
        "scripts": [
            "https://cdn.xyz.com/scripts/background.js"
        ],
        "persistent": false
    },
    "permissions": [
       "http://*/*",
       "https://*/*",
    ],
    "content_security_policy": "script-src 'self' 'unsafe-eval' https://cdn.xyz.com; object-src 'self'"    
}

【问题讨论】:

    标签: google-chrome google-chrome-extension manifest.json


    【解决方案1】:

    您不能直接在清单中添加远程脚本。

    调整 CSP 允许您动态加载脚本 - 通过在您的(本地)后台代码中使用适当的 src 创建一个 <script> 节点。

    // Local background script
    let script = document.createElement('script');
    script.src = "https://cdn.xyz.com/scripts/background.js"; 
    document.head.appendChild(script); // Executes in background document
    

    请注意,此类代码加载(大部分逻辑托管在其他地方并独立更新,在特权上下文中执行)非常不受欢迎,并且被 Mozilla 完全禁止用于列出的 WebExtensions。

    【讨论】:

    • 我可以从后台脚本中动态删除这个注入的脚本,并在像 chrome.tabs.onCreated 这样的事件上注入一些其他的 js 文件吗?
    • 定义“删除”。您无法撤消执行效果(一般情况下)。
    • 移除我的意思是移除执行效果和所有事件监听器,你能告诉我该怎么做吗
    • 没有。因为没有通用的方法。您需要为您的特定更改和侦听器执行此操作。
    【解决方案2】:

    那个CDN使用HTTP/1.1 301 Moved Permanently重定向到cdn.xyz,试试:

    "content_security_policy": "script-src 'self' 'unsafe-eval' https://cdn.xyz https://cdn.xyz.com; object-src 'self'"`
    

    如果可行,您还可以添加通配符域并保留旧的 cdn.xyz.com 域以实现向后兼容性。

    【讨论】:

    • 旧的 DNS 重定向到新的,我这边好像不在线,可以运行curl -I -L https://cdn.xyz.com/scripts/background.js 吗?
    猜你喜欢
    • 1970-01-01
    • 2021-06-28
    • 1970-01-01
    • 2016-09-09
    • 2016-06-17
    • 2013-07-04
    • 2016-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多