在FF中检测导航添加

时间:2015-10-15 15:29:43

标签: javascript google-chrome-extension firefox-addon firefox-addon-sdk

我正在使用' FF Addon SDK'将Chrome扩展程序移植到FF。在后台脚本(main.js)文件中,我需要使用FF等效的...

chrome.webNavigation.onBeforeNavigate.addListener()

chrome.tabs.onUpdated.addListener()

我注意到需要(" sdk / tabs")。只有打开,关闭,完成等,但与导航无关。

我看到一些使用Page-Mod的解决方案,或者展示了开发FF Extensions的旧XUL方法的解决方案。我特意寻找FF Addon SDK(仅)解决方案。

感谢任何输入。

编辑:我能够通过使用Progress Listener找出chrome.tabs.onUpdated.addListener()的替代方法。显然,在FF中它被称为onLocationChange。仍在寻找chrome.webNavigation.onBeforeNavigate.addListener()的替代方案

3 个答案:

答案 0 :(得分:1)

遗憾的是,chrome.webNavigation.onBeforeNavigate.addListener()没有任何合适的替代品。 一周前发现自己处于同样的境地。尝试使用nsIWebProgressListener.onStateChange进行STATE_START。没有按预期工作。 你最好的选择是: 1.)使用onLocationChange事件,它会为您提供正在加载的位置的URI。 2.)拦截Httprequest。过滤掉一个顶层并将其称为onbeginnavigate。

如果您找到其他方法,请告诉我。

答案 1 :(得分:1)

好的,我设法搞清楚了。我们需要使用onStateChange监听器。为了模仿onBeforeNavigation,我们不仅需要检查STATE_START,还需要检查STATE_IS_DOCUMENT。

var progressListener = {
    QueryInterface: XPCOMUtils.generateQI([Ci.nsIWebProgressListener, Ci.nsISupportsWeakReference]),

    onLocationChange: function(aWebProgress, aRequest, aURI) {
        if (aRequest && aURI) {
            console.log('onLocationChange: ' + aURI.spec);
        }
    },

    onStateChange: function(aWebProgress, aRequest, aStateFlags, aStatus) {
        var status = Ci.nsIWebProgressListener;

        if(aStateFlags&status.STATE_START && aStateFlags&status.STATE_IS_DOCUMENT) {
            console.log('onStateChange: ' + aRequest.QueryInterface(Ci.nsIChannel).originalURI.spec);
        }
    }
};

答案 2 :(得分:0)

您可以附加截图中的onBeforeUnload / onUnload事件。