2014-01-21 136 views
0

我想创建我的第一个扩展。firefox扩展工作页面加载

我发现这个样本: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); 
+0

你能告诉我们你的代码? – everton

+0

添加代码...似乎在init函数中调用的代码不会在页面加载时运行。 – Nadia

回答

0

如果你在做什么是在特定的网页上运行一些JavaScript,比如将内容添加到表格中,也许你应该考虑为Greasemonkey addon做一个脚本,而不是完整的插件。有了这个,你可以为你的页面编写你的JS,并且每次浏览这个特定的页面时它都会被执行。

编辑:

尝试这样的:

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

感谢Yolanda,但我必须给这个附加组件来完成一个用Adobe AIR编写的软件。我想给用户一个可以安装的插件。我不能告诉他们“下载Greasemonkey并添加此js代码” – Nadia

+0

@Nadia:请参阅我的编辑。 –

+0

工作很好,谢谢! – Nadia

0

我打赌,extensions.linktargetfinder.autorun不存在。所以getBoolPref抛出一个异常,其余的是历史。

更改您的代码为以下

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

谢谢,我修改了我在该链接上找到的示例,它具有autorun选项(即使我没有看到任何区别),所以它不会丢失。无论如何,我试图添加电话,甚至出“的”如果(自动运行)“,它无法正常工作。 我用约兰达脚本解决了。不管怎么说,还是要谢谢你! – Nadia