地址栏中的值更改时的通知

时间:2013-04-01 10:12:14

标签: firefox firefox-addon firefox-addon-sdk

如果地址栏中的URL(也称为位置栏)发生更改,如何收到通知。使用以下代码,我试图在用户导航到另一个页面时(通过单击链接,使用后退/前进按钮,通过在位置栏中键入地址等)以及用户切换选项卡时收到通知。

var myExtension = {
oldURL: null,


init: function() {
    gBrowser.addProgressListener(this);
},

uninit: function() {
    gBrowser.removeProgressListener(this);
},

processNewURL: function(aURI) {
    if (aURI.spec == this.oldURL) return;

    // now we know the url is new...
    alert(aURI.spec);
    this.oldURL = aURI.spec;
},

// nsIWebProgressListener
QueryInterface: XPCOMUtils.generateQI(["nsIWebProgressListener",
                                       "nsISupportsWeakReference"]),

onLocationChange: function(aProgress, aRequest, aURI) {
    this.processNewURL(aURI);
},

onStateChange: function() {},
onProgressChange: function() {},
onStatusChange: function() {},
onSecurityChange: function() {}
};


};


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

但是此代码正在获取XPCOMUtils和window的引用错误。我正在firefox附加构建器上开发此代码。有什么我需要导入???

3 个答案:

答案 0 :(得分:1)

在文件开头添加此代码以导入XPCOMUtils.jsm

var {Cc, Ci, Cu} = require("chrome");
Cu.import("resource://gre/modules/XPCOMUtils.jsm", this);

答案 1 :(得分:0)

嘿,我得到了我的问题的答案,但是点击事件我需要它在页面加载事件上工作 我尝试了document.addEventListener()但它没有工作

// This is an active module of the binitksingh (1) Add-on

    const contextMenu = require("context-menu"),
    data = require("self").data,
    notify = require("simple-notify").notify,
    tabs = require("tabs"),
    widgets = require("widget");


    exports.main = function(options, callbacks) {
   // Add a one-click option to addons bar.
    var widget = widgets.Widget({
    id: "Show-url",
    label: "Show URL",
    contentURL: "http://www.example.com/favicon.ico",


    onClick: function() {
        var tabworker = tabs.activeTab.attach({
            contentScriptFile: data.url('js/find-url.js'),
            onMessage: processUrl
        });
        tabworker.port.emit('click');
    },
});


 }


  function processUrl(url) {
    if (url) {
        notify("Hello now u r on:\n" + url);
             } else {
                notify('ZOMG, error finding URL.');
                    }
         }

答案 2 :(得分:0)

在您的内容脚本中,您可以捕获hashchangepageshow的事件。

当网站中的URL发生更改时,由于您没有离开页面的某种导航类型,会触发哈希更改事件。

当您向前导航时,PageShow将会触发。

否则,如果您是第一次访问某个页面,它应该是第一次附加您的脚本。您可以*.port.emit返回主脚本。

根据您使用PageMod或仅在选项卡上附加工作程序可能会影响您使用这些事件的方式,此方法需要使用可访问dom的内容脚本。否则,您必须定期检查main.js中标签的url属性。