Basilevs
Basilevs

Reputation: 23922

How to add a Progress Listener to a tab object from Addon SDK

I'd like to get URL change notification (not load ones). There is an API, but I don't understand how to use in context of Addon SDK, which treats tabs in its own way.

  1. How to install a listener to an SDK tab?
  2. How to convert nsiDOMWindow from a progress object to SDK tab?

Related:

Upvotes: 3

Views: 223

Answers (1)

Basilevs
Basilevs

Reputation: 23922

To install a listener, convert SDK tab to its raw (old) representation using viewFor. Backward conversion is possible with modelFor and 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);
});

Inspired by Converting to chrome windows

Upvotes: 2

Related Questions