我最近正在开发一个FF插件。我的插件将在评估contentScriptFile之前下载一些配置文件。我的代码是这样的:
panel.on("show", function() {
var url = "http://domain/config.js";
request({
url:url,
onComplete: function(response) {
worker = tabs.activeTab.attach({
contentScript:response.text,
contentScriptFile: [data.url("js/do1.js"), data.url("js/do2.js")]
});
...
}
})
}
但是正如你的文档所说,contentScriptFile将在contentScript之前运行,所以如果我想先运行contentScript,我该怎么办? 我试图连接两次,首先只附加contentScript,然后附加contentScriptFile,但不成功。
感谢您的时间。
答案 0 :(得分:1)
您不能在特权上下文中执行远程脚本,也不能在可能安全的上下文中执行不安全的远程脚本。你问的问题都失败了:
http://
脚本(您在示例中给出了该脚本),该脚本可能是https://
。这将允许中间人攻击。 (即使您从https
投放了“配置”,附加网站仍会拒绝您的提交,BTW,因为无法审核,因为活动内容不完整)。因此,实际上,您有两个安全漏洞,这两个漏洞都可以并且应该make your add-on end up on the blocklist。
但是,您可以使用非活动/不可执行格式检索配置,例如 JSON 或 XML (或简单文字,如果你愿意的话。)
传递这些配置值可以通过
实现使用contentScriptOptions
(tabs
和worker
中未记录,但在page-mod
中,但应该适用于所有人,如粗略测试所示) 。完整的例子:
var tabs = require("sdk/tabs");
tabs.on('activate', function(tab) {
tab.attach({
contentScript: 'console.log(self.options);',
contentScriptOptions: {"abc": 123}
});
});
答案 1 :(得分:0)
您可以使用self
SDK模块中的data.load
将内容脚本加载到字符串中,并将值附加到contentScript
数组:
worker = tabs.activeTab.attach({
contentScript: [
response.text,
data.load("js/do1.js"),
data.load("js/do2.js")
]
});