3

我正在创建一个 Firefox 扩展。我想使用 Firefox 扩展在加载时为所有网页加载我的外部 js 文件。我可以在我的 html 文件中成功加载加载事件中的所有 js 文件。但是我怎样才能执行到我的扩展。

window.onload = load;
function load() 
{               
      var filerefs=document.createElement('script')
      filerefs.setAttribute("type","text/javascript")
      filerefs.setAttribute("src", 'http://code.jquery.com/jquery-1.9.1.min.js')
      var head = doc.getElementsByTagName( "head" )[ 0 ].appendChild( filerefs );
}

请指导我。

4

1 回答 1

2

如果你想检测页面加载而不是应用程序加载,你应该这样做(这第一部分应该在你的主覆盖文件中):

// do not try to add a callback until the browser window has
// been initialised. We add a callback to the tabbed browser
// when the browser's window gets loaded.
window.addEventListener("load", function (event) {
  // Add a callback to be run every time a document loads.
  // note that this includes frames/iframes within the document

  gBrowser.addEventListener("load", load(event), true);
}, false);

这里参考

我将事件添加到加载函数中,因为该事件不仅会在加载本身上触发,还会在其他元素上触发,因此您必须验证您只执行了一次(参考此处):

function load(event) {
    if (event.originalTarget.nodeName == "#document") {
        var htmlns = "http://www.w3.org/1999/xhtml";
        var doc = gBrowser.selectedBrowser.contentDocument;

        var filerefs = doc.createElementNS(htmlns,'script');
        filerefs.setAttribute("type","text/javascript");
        filerefs.setAttribute("src", "http://code.jquery.com/jquery-1.9.1.min.js");
        doc.getElementsByTagName("head")[0].appendChild(filerefs);
    }
}

我们必须定位页面内容,而不是使用 document.getElement...,否则您将从插件中获取元素(使用 gBrowser.selectedBrowser.contentDocument 可以让您访问当前页面的 dom)。在创建元素上,我们要创建 html 元素,因此您定义和使用 html 命名空间(参考此处)。

这应该可以解决问题:

在此处输入图像描述

于 2013-08-02T14:28:22.607 回答