我的任务是为Firefox编写一个插件,该插件将div元素添加到现有页面。我下载了附加SDK,并编写了一个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时,它将启动Firefox,如果我转到特定的网页,则此脚本有效。但是,当我使用cfx xpi创建XPI文件,然后单击Firefox并打开该文件时,它会安装我的附件,但是现在当我转到附件之前提供的相同网页时,该附件将不起作用。我有此外部Javascript文件,该文件存储在文件夹“数据”中。

appendFuncmyscript.js文件中。

如何使我的扩展程序在生产环境中而不只是在测试环境中工作?我认为主要问题是它找不到此data / myscript.js(它包含在.xpi文件中吗?)

最佳答案

请勿混用contentScriptcontentScriptFile。另外,您不知道两者首先加载的是什么。

而是加载您的脚本和communicate using 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网站上进行托管,还请参考Add-on Policies。政策例如禁止在以下情况下投放广告:a)没有明确标记的广告; b)用户未选择加入广告的广告。

关于javascript - 使用附加SDK创建XPI软件包?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24574276/

10-09 17:00