浏览器对象/ API暴露给Firefox附加组件

时间:2011-09-09 16:54:42

标签: firefox-addon

我是Firefox附加组件开发的新手,并且混淆了哪些类型的浏览器对象/ API暴露给附加代码。 我搜索并阅读了很多教程,所有这些都没有回答我的困惑。 例如,我有一些问题。

  1. 如何访问浏览器的onload事件或初始化我的加载项?
  2. 如何在加载页面时访问活动标签/窗口的onload事件?
  3. 我可以使用jQuery访问任何标签/窗口的DOM。
  4. 请提供任何好的资源,可能是教程,api参考或任何好书。

1 个答案:

答案 0 :(得分:2)

这应该回答你的前两个问题:https://developer.mozilla.org/en/Code_snippets/On_page_load。通常的方法是使用一个简单的XUL覆盖覆盖浏览器窗口,该覆盖只会加载一个脚本(或者也可能是两个,jQuery)。该脚本将load事件处理程序附加到浏览器窗口 - 在浏览器窗口完成加载之前,您不应该执行任何操作。在load事件监听器中,您在浏览器中为DOMContentLoaded个事件注册了一个监听器,这意味着无论何时加载页面都会收到通知。

对于jQuery,最“复杂”的部分是其他扩展也在同一浏览器窗口的上下文中运行。所以你不能以通常的方式使用jQuery - 它注册可能与其他扩展的变量冲突的全局变量$。相反,您将扩展的功能封装在一个对象中,该对象具有与扩展名称相关的唯一名称:

var myExtension = {
  $: jQuery.noConflict(true),
  init: function() {
    ..
  },
  onPageLoad: function(event) {
    var doc = event.originalTarget;
    var element = this.$("#foo", doc);
    ...
  }
}

window.addEventListener("load", function() { myExtension.init(); }, false);

这里我将jQuery的$函数作为对象的属性而不是全局变量。您可以稍后将其应用于特定文档,只需将该文档指定为第二个参数。