当我在firefox扩展中使用page-mod添加内容脚本时。内容脚本函数执行三次

时间:2013-10-24 14:51:34

标签: javascript firefox firefox-addon firefox-addon-sdk

我无法理解。为什么我的函数在使用“page-mod”在firefox扩展中添加后执行三次。

这是我的代码: [ main.js

var pageModOptions = {
    include: ["http://xyz.com/*"],
    attachTo: ["top", "frame", "existing"],
    contentScriptWhen: "end",
    onAttach: function(worker){
        worker.port.on("Done", function(elementContent) {
            console.log("emitted by tarun :" + elementContent);
            worker.port.emit("start", htmlfilePath);
        });
    },
};

pageModOptions.contentScriptFile = [data.url("js/main.js"),data.url("js/jquery-1.8.2.min.js"),data.url("js/hello.js")];

//pageModOptions.contentScriptFile = data.url("js/jquery-1.8.2.min.js");
pageModOptions.contentStyleFile = data.url("js/main.css");
pageModOptions.contentScriptOptions = csOptions;
pageMod.PageMod(pageModOptions); 

和内容[ hello.js ]

function test(){
    window.alert('testing phase 1');
}
test();

所以这个警报被称为三次。如何阻止这种行为。

1 个答案:

答案 0 :(得分:2)

对于从http://xyz.com/加载的每个HTML文档,您的内容脚本将只运行一次 - 您的内容脚本的单独实例将被注入其中。因此,在运行此代码时看到三个警报可能意味着以下事项:

  • 打开了三个浏览器标签页,其中包含http://xyz.com/已加载的页面。
  • 只有一个浏览器标签,但加载的http://xyz.com/页面包含两个也从http://xyz.com/加载的框架。

最有可能的是,如果您将window.alert('testing phase 1')更改为window.alert(location.href),您的混淆将被清除。