内容隐私策略拒绝向DOM添加脚本

时间:2014-10-04 13:15:51

标签: javascript firefox-addon-sdk mozilla

我使用Firefox SDK插件将一些脚本附加到活动标签页

// main.js
tabs.activeTab.attach({
  contentScriptFile: [data.url("js/loader.js") ]
});

并且 loader.js 根据其正在处理的网站的URL和标题创建一个新脚本,然后附加新的脚本文件,如 counter.js < / em>到身体。执行加载程序工作正常,但网站的内容隐私政策拒绝附加counter.js。这是错误:

Content Security Policy: The page's settings blocked the loading of a resource at http://example.com/counter.js ("default-src http://www.pinterest.com:80 https://*.pinterest.com:443 https://*.pinimg.com:443 http://*.pinterest.com:80 http://*.pinimg.com:80 http://*.google.com:80 http://connect.facebook.net:80 http://*.google-analytics.com:80 https://*.facebook.com:443 http://*.facebook.com:80 http://www.googleadservices.com:80 http://googleads.g.doubleclick.net:80 http://*.tiles.mapbox.com:80 http://*.4sqi.net:80 http://*.online-metrix.net:80 http://akwww.polyvorecdn.com:80 https://www.polyvore.com:443 'unsafe-inline' 'unsafe-eval'").

我之前已经为Chrome扩展程序完成了这项工作,并且可以。但问题是如何通过Firefx SDK插件附加脚本?
提前谢谢。

1 个答案:

答案 0 :(得分:2)

如果您只想将脚本附加到包含特定网址的网页,那么最好使用PageMod而不是附加到标签页。看一下你的大部分代码并了解你打算做什么来为你提供最好的答案会很有用,但是如果PageMod不是你想要的,那么这里有一些不同的场景。

有两种方法可以解决这个问题。我要做的就是立即简单地附加两个脚本,如下所示:

<强> main.js

tabs.activeTab.attach({
  contentScriptFile: [data.url("js/loader.js"), data.url("js/counter.js") ]
});

<强> counter.js

var i = 0;
function count() {
  i++;
}

<强> loader.js

if (titleIsValid() && urlIsValid()) {
  count();
}

因为所有文件都存储在本地,所以我不会过多担心将大量JS文件附加到很多页面。您只需要构建 count.js ,这样就不会自动执行代码。


如果您确实只想在这些条件适用的情况下附加JS文件,您可以这样做:

<强> main.js

var worker = tabs.activeTab.attach({
  contentScriptFile: data.url("js/loader.js")
});

worker.port.on('attachCounter', function() {
  worker.tab.attach({
    contentScriptFile: (data.url("js/counter.js")
  });
});

<强> loader.js

if (titleIsValid() && urlIsValid()) {
  self.port.emit('attachCounter');
}

详细了解communicating between content scripts and main scripts from tab/attach


如果您将脚本附加到页面的原因是要与页面上已有的页面脚本进行交互(以及Firefox告诉您它不安全的确切原因),请阅读interacting with page scripts