Javascript 如何使contentScript在contentScriptFile之前运行?
我最近正在开发一个FF插件。在评估contentScriptFile之前,我的插件将下载一些配置文件。我的代码如下:Javascript 如何使contentScript在contentScriptFile之前运行?,javascript,firefox-addon,firefox-addon-sdk,Javascript,Firefox Addon,Firefox Addon Sdk,我最近正在开发一个FF插件。在评估contentScriptFile之前,我的插件将下载一些配置文件。我的代码如下: panel.on("show", function() { var url = "http://domain/config.js"; request({ url:url, onComplete: function(response) { worker = tabs.activeTab.attach({ contentScrip
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,但未成功
感谢您的时间。您可以使用self
SDK模块以字符串形式加载内容脚本,并将值附加到contentScript
数组中:
worker=tabs.activeTab.attach({
contentScript:[
response.text,
data.load(“js/do1.js”),
data.load(“js/do2.js”)
]
});
您不能在特权上下文中执行远程脚本,也不能在可能安全的上下文中执行不安全的远程脚本。你所问的两个问题都失败了:
http://
脚本(您在示例中给出了该脚本),该脚本可能是https://
。这将允许中间人攻击。(顺便说一句,即使您从httpshttps
提供了“配置”,加载项网站仍会拒绝您的提交,因为无法对其进行审核,因为活动内容不完整)- 使用
(如粗略测试所示,contentScriptOptions
和tabs
中均未记录,但应适用于所有人)。完整示例:worker
var tabs = require("sdk/tabs"); tabs.on('activate', function(tab) { tab.attach({ contentScript: 'console.log(self.options);', contentScriptOptions: {"abc": 123} }); });
- 或者
data.load
with a relative path返回与SDK加载项捆绑在一起的文件的内容。是的,但response.text
肯定不会;)我应该在评论中说得更清楚些。很抱歉造成混淆。不管安全问题如何,您的方法确实很有帮助。谢谢。@user2552042虽然它目前还有效,但我强烈建议您认真考虑一下@nmaler的建议。对于配置,contentScriptOptions
是一种方法。仅对与扩展捆绑在一起的静态内容脚本使用我的答案中的方法。感谢您提供详细的指南。我现在知道怎么处理了。