javascript - Firefox for Android 扩展 : How to trigger event on every page load?

标签 javascript android firefox-addon firefox-addon-restartless

我正在尝试为 Android 编写一个 Firefox 扩展,它会在每次网页更改时触发一个事件。它监视正在加载哪些 URL(所有 URL)和加载的页面内容(通过 DOM 检查)。我的问题是使用下面代码的窗口加载事件仅在打开选项卡时加载,如果您离开页面,则不会触发任何事件。

我如何挂接到任何 URL 的每个页面加载事件?

这段代码是bootstrap.js的全部内容:

Components.utils.import("resource://gre/modules/Services.jsm");
var windowListener = {
  onOpenWindow: function(aWindow) {
    console.log('vipro.openWindow');
    let domWindow = aWindow.QueryInterface(Components.interfaces.nsIInterfaceRequestor).getInterface(Components.interfaces.nsIDOMWindowInternal || Components.interfaces.nsIDOMWindow);
    domWindow.addEventListener("UIReady", function onLoad() {
      domWindow.removeEventListener("UIReady", onLoad, false);
      console.log('vipro.openWindow.loaded');
      // ** ONLY EVER FIRED ONCE ** //
      try {
        var browser = Services.wm.getMostRecentWindow("navigator:browser");
      } catch(e) {
        console.log('vipro.openWindow.error.' + e.toString());
      }
      console.log('vipro.openWindow.loaded.DONE');
    });
    console.log('vipro.openWindow.DONE');
  },
  onCloseWindow: function(aWindow) {},
  onWindowTitleChange: function(aWindow, aTitle) {},
};

function startup(data, reason) {
  console.log('vipro.startup');
  try {
    let wm = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator);
    wm.addListener(windowListener);
  } catch(e) {
     console.log('vipro.startup.error.' + e.toString());
  }
  console.log('vipro.startup.DONE');
}

function shutdown() {
  console.log('vipro.shutdown');
}

function install(aData, aReason) {}
function uninstall(aData, aReason) {}

我并不担心上面的代码只适用于新标签而不适用于现有标签(我故意保持简单),只是事实是当我离开初始的新标签页时,我没有获得连接到其他页面的机会。

最佳答案

在此页面上发现了一个稍微不同的方法:

https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Mobile_development

使用 cfx 提供的布局而不使用 Bootstrap ... Bootstrap 我能够使用 page-mod 实现我需要的东西。

关于javascript - Firefox for Android 扩展 : How to trigger event on every page load?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29186379/

相关文章:

android - 哪些 Android 工具和方法最适合查找内存/资源泄漏?

javascript - Firefox 附加组件 sdk 边栏不兼容 - 如何警告用户?

javascript - 是否可以创建一个关于 :config settings? 的更改的 Firefox WebExtension 如何?

Javascript - 为什么我的数组循环不工作?

javascript - 在单个日历或日期选择器中选择日或月或年(灵活选择模式)

java - Youtube 播放器在向下滚动时停止

java - "properly"接到电话时如何发送短信?

XUL 中的 CSS 特性

javascript - 在 Ember 2.6 中捕获粘贴内容

javascript - 使用 ClientDependency Framework 动态添加 CSS 或 JS 的正确方法是什么?