firefox扩展工作在页面加载

时间:2014-01-21 19:45:47

标签: firefox-addon

我正在尝试创建我的第一个扩展程序。

我找到了这个示例:http://blog.mozilla.org/addons/2009/01/28/how-to-develop-a-firefox-extension/

我需要在特定页面上获取一些html内容并在同一页面中写一些东西,所以我修改了它并获得了我需要的东西(使用javascript我在我想要的表中添加了内容)。但是要查看我的内容,我必须从状态栏上的按钮启动扩展程序,而我希望在我加载/重新加载它时已经在页面中处于活动状态(检查URL,以便仅使其工作)在那个页面上)但我不能自动拥有它。

我尝试添加linkTargetFinder.run();在init区域,但......没有。此外,作为“自动运行”的延伸,但如果活跃,我不会看到任何变化。

任何工作样本?

由于 纳迪亚

这是代码(我编辑了.js文件),我评论了几个测试不起作用......

var linkTargetFinder = function () {
var prefManager = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
return {
    init : function () {
        gBrowser.addEventListener("load", function () {
            var autoRun = prefManager.getBoolPref("extensions.linktargetfinder.autorun");
            if (autoRun) {
                linkTargetFinder.run();
            }
            //linkTargetFinder.run();  // doesn't work
        }, false);
        //linkTargetFinder.run();  // doesn't work
        alert("ZZZZZZZZZZZZZZZZZZ"); // doesn't work
    },

    run : function () {
        var head = content.document.getElementsByTagName("head")[0],
            style = content.document.getElementById("link-target-finder-style"),
            allLinks = content.document.getElementsByTagName("a"),
            foundLinks = 0;

        if (!style) {
            style = content.document.createElement("link");
            style.id = "link-target-finder-style";
            style.type = "text/css";
            style.rel = "stylesheet";
            style.href = "chrome://linktargetfinder/skin/skin.css";
            head.appendChild(style);
        }   

        for (var i=0, il=allLinks.length; i<il; i++) {
            elm = allLinks[i];
            if (elm.getAttribute("target")) {
                elm.className += ((elm.className.length > 0)? " " : "") + "link-target-finder-selected";
                foundLinks++;
            }
        }
        if (foundLinks === 0) {
            alert("No links found with a target attribute");
        }
        else {
            //alert("Found " + foundLinks + " links with a target attribute");
        }
        t = content.document.getElementById("ERSContainer"), // ID of the table
        d = t.getElementsByTagName("tr")[1],
        r = d.getElementsByTagName("td")[1];
        var myMail = "mail: "+r.textContent; //ok scrive nella td
        var myName =  content.document.getElementById("buyercontactname").value;
        var myAddr1 =  content.document.getElementById("buyeraddress1").value;
        var myAddr2 =  content.document.getElementById("buyeraddress2").value;
        var myCity =  content.document.getElementById("buyercity").value;
        var myProv =  content.document.getElementById("buyerstateprovince").value;
        var myCAP =  content.document.getElementById("buyerzip").value;

        var elt = content.document.getElementById("buyercountry");
        var myCountry =  elt.options[elt.selectedIndex].text;
        var myTel =  content.document.getElementById("dayphone1").value;
        var myTag1 = "<tr><td colspan='2'>OK!!!<br />";
        var myTag2 = "</td></tr>";


        z= t.innerHTML;

        t.innerHTML  = myTag1 + myMail +
         " - "+myName+
        myAddr1 + "<br />" +
        myAddr2 + "<br />" +
        myCity + "<br />" +
        myProv + "<br />" +
        myCAP + "<br />" +
        myCountry + "<br />" +
        myTel + "<br />" +
        myFlash+
         myTag2+z;

    }
};
}();
window.addEventListener("load", linkTargetFinder.init, false);

2 个答案:

答案 0 :(得分:0)

如果你正在做的是在特定的网页上运行一些JavaScript,比如在表格中添加内容,那么你应该考虑为Greasemonkey addon而不是完整的插件做一个用户脚本。通过这种方式,您可以为页面编写JS,并在每次浏览此特定页面时执行它。

编辑:

试试这个:

init: function () {
   gBrowser.addEventListener("load", linkTargetFinder.run, true);
},
...

答案 1 :(得分:0)

我打赌extensions.linktargetfinder.autorun不存在。所以getBoolPref会引发异常,其余的都是历史记录。

将您的代码更改为以下

var autoRun;
try {
  autoRun = prefManager.getBoolPref("extensions.linktargetfinder.autorun");
} catch(e){
  autoRun = false;
}