我一整天都在扯头发。
我正在为 Facebook 创建一个工具。
我正在尝试将远程 Javascript 注入(inject)我的 Chrome 扩展程序中。
它似乎适用于除 Facebook.com 之外的所有其他网站,因为 http 协议(protocol)是安全的:HTTPS
当我浏览其他不使用 HTTPS 的网站时,脚本被注入(inject)
是否无法注入(inject)外部 JavaScript 来为安全站点提供动态内容?
我使用以下代码来注入(inject)外部js:
app.js(扩展的一部分)
加载以下内容:
chrome.tabs.executeScript(tabId, {file: "js/loadexternal.js"});
然后/js/loadexternal.js 执行以下操作:
var s = document.createElement('script');
s.type = 'text/javascript';
s.src ='https://www.website.com/loader.js?client=tacx';
document.getElementsByTagName('head')[0].appendChild(s);
请注意:我还从安全 (HTTPS) 服务器加载远程脚本。 没有帮助!
只要我不在安全页面上,就会加载 loader.js 文件...
但它无法在 Facebook 上加载,而 Facebook 似乎始终使用 HTTPS 协议(protocol)。
请帮助我。谢谢。
PS> 有没有办法在我的 FB 工具扩展中显示动态编译的结果?
最佳答案
如果您查看 Facebook 页面上的 HTTP 响应 header ,您将看到以下行:
content-security-policy: default-src *;script-src https://*.facebook.com http://*.facebook.com https://*.fbcdn.net http://*.fbcdn.net *.facebook.net *.google-analytics.com *.virtualearth.net *.google.com 127.0.0.1:* *.spotilocal.com:* chrome-extension://lifbcibllhkdhoafpjfnlhfpfgnpldfl 'unsafe-inline' 'unsafe-eval' https://*.akamaihd.net http://*.akamaihd.net *.atlassolutions.com;style-src * 'unsafe-inline';connect-src https://*.facebook.com http://*.facebook.com https://*.fbcdn.net http://*.fbcdn.net *.facebook.net *.spotilocal.com:* https://*.akamaihd.net ws://*.facebook.com:* http://*.akamaihd.net https://fb.scanandcleanlocal.com:* *.atlassolutions.com http://attachment.fbsbx.com https://attachment.fbsbx.com;
Facebook 的安全策略不允许来自不属于此列表的域的脚本,因此我认为您无法从您的扩展程序加载外部脚本。
如果该 header 不存在,您通常可以包含在 https://
协议(protocol)上托管的脚本。
关于javascript - Chrome 扩展程序 : Possible to Inject External JavaScript in Secured Pages?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22585668/