Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 谷歌浏览器扩展-脚本注入_Javascript_Jquery_Google Chrome Extension - Fatal编程技术网

Javascript 谷歌浏览器扩展-脚本注入

Javascript 谷歌浏览器扩展-脚本注入,javascript,jquery,google-chrome-extension,Javascript,Jquery,Google Chrome Extension,我正试图让我的Chrome扩展注入一些带有content\u脚本的javascript,使用前面的作为参考 manifest.json contenscript.js: (也尝试了方法,但没有成功。) 我一直收到这个javascript错误。这是一个例子 GET chrome-extension://invalid/ (匿名功能) 在清单文件中,指定了“manifest\u version”:2。这会自动激活更严格的模式,默认情况下,所有扩展名的文件都不可用于网页 原始代码永远不会工作,因为元

我正试图让我的Chrome扩展注入一些带有
content\u脚本的javascript,使用前面的作为参考

manifest.json contenscript.js: (也尝试了方法,但没有成功。)

我一直收到这个javascript错误。这是一个例子

GET chrome-extension://invalid/
(匿名功能)

  • 在清单文件中,指定了
    “manifest\u version”:2
    。这会自动激活更严格的模式,默认情况下,所有扩展名的文件都不可用于网页
  • 原始代码永远不会工作,因为
    元素在注入后会立即被删除(脚本文件没有机会加载)
  • 结果为1.,控制台中显示以下错误:

    Failed to load resource                             chrome-extension://invalid/
    
    要解决此问题,请将
    script.js
    添加到您的
    清单文件中的白名单中

    { "name": "Chrome Extension", "version": "1.0", "manifest_version": 2, "content_scripts": [{ "matches": ["http://pagetoinject/script/into/*"], "js": ["contentscript.js"] }], "web_accessible_resources": ["script.js"] } { “名称”:“Chrome扩展”, “版本”:“1.0”, “内容脚本”:[{ “匹配项”:[“http://pagetoinject/script/into/*"], “js”:[“contentscript.js”] }],
    } 这里的问题是您使用的是
    manifest\u版本:2
    。如果您制作了
    清单版本:1
    ,您将不会有任何问题。版本2限制了许多这样的功能以提高安全性。有关清单版本2中施加的限制的更多详细信息,请参阅。我找不到CSP中提到的您的具体案例,但当我将清单版本更改为1并执行您的代码时,它工作正常

    除了上面的答案之外,我注意到,在您的
    contentscript.js
    中,您只是添加了另一个脚本,即
    script.js
    为什么不通过
    manifest.json

    中的content\u脚本直接添加
    script.js

    得到此错误的另一个原因是如果url被CORS阻止。检查页面的网络请求标头,查看其是否包含内容安全策略:

    Content-Security-Policy: default-src 'self' http://example.com; connect-src http://example.com/; script-src http://example.com/
    
    您可以尝试在新浏览器选项卡中打开url,以验证图像url是否正确:

    chrome-extension://mjcbjlencnokpknflpneebajalcnnifo/images/pattern.jpg
    
    解决此问题的一种方法是使用图像数据URI:

    data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7
    

    Chrome扩展的样板:


    不确定发生了什么,但为什么不改为这样做:
    “js”:[“contentscript.js”,“script.js”]
    ,因为
    内容脚本是在隔离的环境中执行的。我需要将
    script.js
    注入DOM,这样我就可以像使用公共js文件夹一样使用该文件。在内容脚本的第一节中介绍了如何在内容脚本中执行您正在尝试的操作。这可能就是你要找的。谢谢你的回复,一切都如前所述。同样感谢来自的原始代码,但是有没有办法从以这种方式(或任何其他方式)注入的脚本中修改
    window
    的属性?我已经尝试了很多,但这是唯一适合我的答案
    Content-Security-Policy: default-src 'self' http://example.com; connect-src http://example.com/; script-src http://example.com/
    
    chrome-extension://mjcbjlencnokpknflpneebajalcnnifo/images/pattern.jpg
    
    data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7