【问题标题】:Load scripts after page load - Firefox extension页面加载后加载脚本 - Firefox 扩展
【发布时间】:2013-08-02 14:19:50
【问题描述】:

我正在创建一个 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 );
}

请指导我。

【问题讨论】:

  • 是load() 没有被触发还是被触发但是你得到一个错误/标签没有加载?
  • 你的意思是要在每一个打开的网页中注入一些JS?
  • 应注意,出于安全和兼容性原因,强烈建议不要将(远程)javascript 注入随机页面。如果您是 SDK 用户,请查看 page-mod。
  • @Matthew Gertner 你是对的。我想要这个方法。我该如何设置它

标签: javascript jquery firefox firefox-addon mozilla


【解决方案1】:

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

// 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);

来自here的参考

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

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 命名空间(参考 here)。

这应该可以解决问题:

【讨论】:

  • 我想找到加载页面的所有 img 标签。请帮帮我
  • 您只是想在页面中查找图片?您没有其他理由在页面加载时加载脚本吗?如果是这样,您可能希望接受这个问题并开始一个新的问题,因为您的原始问题中没有提到这一点,而且这个问题可能对任何有有效用例的人有用。至于查找图片,请更好地解释您想对新问题上的图片做什么
  • 我接受这个答案。我的另一个问题链接stackoverflow.com/questions/18031833/…请帮助我
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多