我的任务是为Firefox编写一个外接程序,它将向现有页面添加div元素。我下载了Add并编写了如下所示的main.js文件:
var data = require("sdk/self").data;
require("sdk/tabs").on("ready", ExecuteAd);
function ExecuteAd(tab) {
if ( tab.url.indexOf("some url checking") > -1 ) {
var image = "http://www.lavasoft.com/img/product_icons/aaw11/free.png";
var link = "http://www.google.me";
tab.attach({
contentScriptFile: data.url("myscript.js"),
contentScript: "appendFunc('"+image+"', '"+link+"');"
//contentScript: "alert('Works');"
});
}
}当我执行命令cfx run,它启动火狐,如果我转到特定的网页,这个脚本工作。但是,当我用cfx xpi创建XPI文件,然后单击火狐并打开该文件时,它会安装我的外接程序,但现在,当我转到之前给出的相同的网页时,add就不起作用了。我有这个外部Javascript文件,是存储在文件夹‘数据’。
appendFunc在myscript.js文件中。
如何使我的扩展工作在生产环境中,而不仅仅是测试环境?我认为主要的问题是它找不到这个数据/myscript.js(它包括在.xpi文件中吗?)
发布于 2014-07-04 13:09:24
不要把contentScript和contentScriptFile混在一起。另外,您也无法知道首先加载了两个文件中的哪一个。
相反,加载脚本和port。
main.js
var data = require("sdk/self").data;
require("sdk/tabs").on("ready", ExecuteAd);
function ExecuteAd(tab) {
var image = "http://www.lavasoft.com/img/product_icons/aaw11/free.png";
var link = "http://www.google.me";
var worker = tab.attach({
contentScriptFile: data.url("myscript.js")
});
worker.port.emit("showAd", {image: image, link: link});
}myscript.js
self.port.on("showAd", function(data) {
console.log("showing ad", data.link, data.image);
});而且,对于您正在做的事情,PageMod似乎是一个更好的选择。
PS:如果你打算在附加政策网站上主持,也可以咨询addons.mozilla.org。政策,例如,禁止注射广告,即:( a)没有明确标记为这样;( b)用户在此之前没有选择的广告。
https://stackoverflow.com/questions/24574276
复制相似问题