google-chrome - "Refused to load the script"chrome 扩展出错

标签 google-chrome google-chrome-extension content-security-policy javascript-injection

关于 SO 有很多与此类似的问题,但没有一个能解决我的目的。
我正在创建一个类似于 chrome 扩展的“pinterest”。它在网页上注入(inject)脚本,收集图像,然后将其发布到某处。一切正常,但是当我在 pinterest 上运行它时,它给了我这个错误:

Refused to load the script 'https://domain_name.com/my_script.js' because it violates the following Content Security Policy directive: "default-src 'self' https://.pinterest.com https://.pinimg.com *.pinterest.com *.pinimg.com *.google.com connect.facebook.net .google-analytics.com https://.googleapis.com .gstatic.com https://.facebook.com *.facebook.com www.googleadservices.com googleads.g.doubleclick.net platform.twitter.com *.tiles.mapbox.com *.online-metrix.net *.bnc.lt bnc.lt *.yozio.com 'unsafe-inline' 'unsafe-eval'". Note that 'script-src' was not explicitly set, so 'default-src' is used as a fallback.


我知道这与 Content Script Policy 有很大关系(我对此了解不多)但是,我关注了 thisthis链接为我提供了关于什么是 CSP 以及如何使用它的足够信息。
我已经完成了所需的一切(我认为),但它仍然无法正常工作。这是我的 manifest.json

{
  "manifest_version": 2,

  "name": "Image Posting",
  "description": "This extension enables you to post images",
  "version": "1.0",

  "browser_action": {
    "name": "Image Posting"
  },
  "homepage_url": "https://www.domain_name.com/",
  "background":{
      "scripts":["background.js"]
  },
  "content_scripts": [
    {
      "matches": ["<all_urls>"],
      "js": ["jquery.js", "content.js"]
    }
  ],
  "icons": {
     "128": "icon_128.png",
     "16": "icon_16.png",
     "48": "icon_48.png"
  },
  "permissions": [
    "activeTab",
    "notifications"
  ],
  "web_accessible_resources": [
    "icon_48.png"
  ],
  "content_security_policy": "default-src 'self'  https://domain_name.com/my_script.js; script-src 'self'  https://domain_name.com/my_script.js; style-src 'self' https://domain_name.com/my_style.css; 'unsafe-inline' 'unsafe-eval'"
}


在某一点上,我还认为其中可能有一些实际上无法完成的事情,然后我尝试了 BUFFER 扩展,它也可以成功地将他们的脚本注入(inject)到 pinterest 上,这意味着这件事在某种程度上是可能的。此外,不要忘记像 AdBlocker 这样的扩展程序适用于每个站点,并且它们还必须从远程服务器中提取一些资源。他们是否以任何方式绕过 CSP,或者有一些我不知道或错过的非常重要的事情。有关如何执行此操作的任何建议/提示?

最佳答案

如果不禁用 CSP,则无法注入(inject)未列入白名单的脚本。

扩展脚本不受此限制,因此将文件托管在扩展包中,并在 web_accessible_resources 中声明它并且您应该能够运行该脚本。

var s = document.createElement('script');
s.src = chrome.extension.getURL('script.js'); // In web_accessible_resources
(document.head || document.documentElement).appendChild(s);
s.onload = function() {
    s.remove(); // Clean up, just to be nice.
};

关于google-chrome - "Refused to load the script"chrome 扩展出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36737818/

相关文章:

javascript - console.log(document.head) 结果随每次刷新而交替

javascript - Web Worker 本身是否允许拥有 Web Worker 线程?

google-chrome-extension - 运行由 Chrome 扩展中的上下文菜单触发的 jquery 脚本

javascript - 使用符合内容安全策略的代码替换多个内联按钮 onclick 事件处理程序

windows - Webusb:尝试在 Windows 上打开打印机时访问被拒绝

html - 为什么在使用 CSS counter() 函数时,除了最后一个之外,Chrome 中的伪元素是可选的?

javascript - 自定义 chrome 扩展中的 Hook 窗口属性

javascript - Chrome 扩展 : failed to load resource for external json

angular - 内容安全策略:Prod 模式下的 Angular 和 Spring Boot 应用程序

php - 内容安全策略 Internet Explorer 错误