【问题标题】:Detecting navigation in FF add ons在 FF 插件中检测导航
【发布时间】:2015-10-15 15:29:43
【问题描述】:

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

chrome.webNavigation.onBeforeNavigate.addListener()

chrome.tabs.onUpdated.addListener()

注意到require("sdk/tabs").on只有open、close、finish等,与导航无关。

我看到了一些使用 Page-Mod 的解决方案,或者展示了用于开发 FF 扩展的旧 XUL 方式的解决方案。我正在专门寻找 FF Addon SDK(仅限)解决方案。

感谢任何输入。

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 我也在使用 onLocationChange,但它的触发速度似乎比 Chrome 中的 onBeforeNavigate 慢很多。您能否提供更多详细信息或拦截HttpRequest的示例代码。
    • 参考本文档:developer.mozilla.org/en-US/Add-ons/Code_snippets/…。没有可用的附加 sdk 方法。您需要移植此示例以使用 js-xpcom
    【解决方案2】:

    好的,我设法弄明白了。我们需要使用 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);
            }
        }
    };
    

    【讨论】:

      【解决方案3】:

      您可以从框架脚本中附加onBeforeUnload/onUnload 事件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-24
        • 2020-04-12
        • 1970-01-01
        • 2023-04-02
        相关资源
        最近更新 更多