Javascript 内容隐私策略拒绝将脚本附加到DOM

Javascript 内容隐私策略拒绝将脚本附加到DOM,javascript,firefox-addon-sdk,mozilla,Javascript,Firefox Addon Sdk,Mozilla,我正在使用Firefox SDK插件将一些脚本添加到活动选项卡 // main.js tabs.activeTab.attach({ contentScriptFile: [data.url("js/loader.js") ] }); 然后loader.js根据它所处理的网站的URL和标题创建一个新脚本,然后将新脚本文件(如counter.js)附加到body。执行loader可以正常工作,但网站的内容隐私策略拒绝添加counter.js。以下是错误: Content Security P

我正在使用Firefox SDK插件将一些脚本添加到活动选项卡

// main.js
tabs.activeTab.attach({
  contentScriptFile: [data.url("js/loader.js") ]
});
然后loader.js根据它所处理的网站的URL和标题创建一个新脚本,然后将新脚本文件(如counter.js)附加到body。执行loader可以正常工作,但网站的内容隐私策略拒绝添加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扩展做过这件事,这是可能的。但问题是如何通过FireFXSDK插件附加脚本?

提前感谢。

如果您只想将脚本附加到具有特定URL的页面,那么最好使用一个链接,而不是附加到选项卡。查看您的大部分代码并了解一点您打算如何为您提供最佳答案是很有用的,但是如果
PageMod
不是您想要的,下面是一些不同的场景

有两种方法可以做到这一点。我要做的一件事是立即附加两个脚本,如下所示:

main.js

tabs.activeTab.attach({
  contentScriptFile: [data.url("js/loader.js"), data.url("js/counter.js") ]
});
var i = 0;
function count() {
  i++;
}
if (titleIsValid() && urlIsValid()) {
  count();
}
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")
  });
});
if (titleIsValid() && urlIsValid()) {
  self.port.emit('attachCounter');
}
counter.js

tabs.activeTab.attach({
  contentScriptFile: [data.url("js/loader.js"), data.url("js/counter.js") ]
});
var i = 0;
function count() {
  i++;
}
if (titleIsValid() && urlIsValid()) {
  count();
}
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")
  });
});
if (titleIsValid() && urlIsValid()) {
  self.port.emit('attachCounter');
}
loader.js

tabs.activeTab.attach({
  contentScriptFile: [data.url("js/loader.js"), data.url("js/counter.js") ]
});
var i = 0;
function count() {
  i++;
}
if (titleIsValid() && urlIsValid()) {
  count();
}
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")
  });
});
if (titleIsValid() && urlIsValid()) {
  self.port.emit('attachCounter');
}
因为您的所有文件都存储在本地,所以我不会太担心将大量JS文件附加到大量页面。您只需要构造count.js,这样就不会自动执行代码


如果您确实希望仅在这些条件适用时附加JS文件,则可以执行以下操作:

main.js

tabs.activeTab.attach({
  contentScriptFile: [data.url("js/loader.js"), data.url("js/counter.js") ]
});
var i = 0;
function count() {
  i++;
}
if (titleIsValid() && urlIsValid()) {
  count();
}
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")
  });
});
if (titleIsValid() && urlIsValid()) {
  self.port.emit('attachCounter');
}
loader.js

tabs.activeTab.attach({
  contentScriptFile: [data.url("js/loader.js"), data.url("js/counter.js") ]
});
var i = 0;
function count() {
  i++;
}
if (titleIsValid() && urlIsValid()) {
  count();
}
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")
  });
});
if (titleIsValid() && urlIsValid()) {
  self.port.emit('attachCounter');
}
阅读更多关于



如果您将脚本附加到页面的原因是为了与页面上已经存在的页面脚本交互(以及Firefox告诉您它不安全的确切原因),那么请阅读。

也许Firefox和Chrome对页面策略的解释不同,Firefox假设“不意味着不”。@Pointy可能,但我需要找到一种方法!我们可以看看你是如何添加脚本的,以及你在什么URL上进行了尝试吗?@willma谢谢,我添加了更多的信息谢谢亲爱的@willma,我以前尝试过所有这些方法。但是因为我已经编写了加载程序和计数器脚本作为书签使用,并且我不知道这个策略,所以我不能使用它们。我想我还没有对这些脚本进行更改。