1

如何在地址栏(也称为位置栏)中的 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.I 上得到了参考错误。我在 firefox Add-on Builder 上开发这段代码。有什么需要导入的吗???

4

3 回答 3

1

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

var {Cc, Ci, Cu} = require("chrome");
Cu.import("resource://gre/modules/XPCOMUtils.jsm", this);
于 2013-04-02T06:51:35.033 回答
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.');
                    }
         }
于 2013-04-05T13:04:57.967 回答
0

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

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

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

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

取决于您是使用 PageMod 还是仅在选项卡上附加工作人员可能会影响您使用这些事件的方式,并且此方法需要使用可以访问 dom 的内容脚本。否则,您将不得不定期检查 main.js 中选项卡的 url 属性。

于 2015-01-24T16:20:42.050 回答