如何从Addon SDK向Tab对象添加Progress Listener

时间:2015-03-29 07:35:55

标签: javascript firefox-addon-sdk

我想获取网址更改通知(不加载网址)。 有an API但我不明白如何在Addon SDK的上下文中使用,它会处理标签in its own way

  1. 如何将监听器安装到SDK选项卡?
  2. 如何将nsiDOMWindowa progress object转换为SDK标签?
  3. 相关:

1 个答案:

答案 0 :(得分:2)

要安装侦听器,请使用viewFor将SDK选项卡转换为其原始(旧)表示。 使用modelFor和getTabForContentWindow可以进行向后转换。

const tabs = require("sdk/tabs");
const {viewFor} = require('sdk/view/core');
const {modelFor} = require('sdk/model/core');
const {getBrowserForTab, getTabForContentWindow} = require("sdk/tabs/utils");
const {Ci, Cu} = require("chrome");
Cu.import("resource://gre/modules/XPCOMUtils.jsm", this);

var progressListener = {
QueryInterface: XPCOMUtils.generateQI([Ci.nsIWebProgressListener, Ci.nsISupportsWeakReference]),
    onLocationChange: function(aProgress, aRequest, aURI) {
        var highLevel= modelFor(getTabForContentWindow(aProgress.DOMWindow));
        console.log("onLocationChange ", highLevel.url);
    }
};

tabs.on('open', function(newTab) {
    var lowLevel = viewFor(newTab);
    var browser = getBrowserForTab(lowLevel);
    browser.addProgressListener(progressListener);
});

灵感来自 Converting to chrome windows