javascript - 重温 - 在 Firefox 中加载顶级页面之前修改 URL

标签 javascript windows url firefox firefox-addon

我想知道如何使用 Firefox 插件在加载页面时修改页面的 URL。我收到了诸如the following之类的建议。具体来说,当用户通过地址栏访问“https://www.google.com”时,我想重定向到“https://www.google.co.uk”。

对于我的特定目的,上述解决方案几乎有效,但它重定向了太多 URL。我发现的一个问题如下:虽然我每次都可以重定向,但有时我会在不想重定向时进行重定向。例如,在 Windows 中,我不仅在当前选项卡的 URL 是常规 Google 时进行重定向,而且在页面进行的某些查询包含上述链接(例如新闻文章)时也会进行重定向。

有没有办法使用 Mozilla 的观察者框架通过仅检查当前选项卡的 URL 来进行重定向?如果没有,是否有一些仍然使用 Mozilla 的附加 SDK 的替代解决方案?

编辑:下面是我有问题的源代码。

var myObserver = {
    register: function() {
        var observerService = Components.classes["@mozilla.org/observer-service;1"]
        .getService(Components.interfaces.nsIObserverService);
        observerService.addObserver(this, TOPIC_MODIFY_REQUEST, false);
    },
    //observe function to capture the changed event
    observe : function(aSubject, aTopic, aData) {
        if (TOPIC_MODIFY_REQUEST == aTopic ) {
            var url;
            aSubject.QueryInterface(Components.interfaces.nsIHttpChannel);

            url = aSubject.URI.spec;
            url = encodeURIComponent(url);


            if (url.indexOf("google.nl") !=-1 || url.indexOf("hl%3Dnl") !=-1
               || url.indexOf("google.com%2Fnl") !=-1 || url == "https%3A%2F%2Fwww.google.com" 
               || url == "https%3A%2F%2Fwww.google.com%2Fncr" || url == 
               "https%3A%2F%2Fwww.google.com%2F%3Fgws_rd%3Dssl")
            {
                aSubject.cancel(Components.results.NS_BINDING_ABORTED);
                loadURL("https://www.google.co.uk/");
            }
    }
}

function loadURL(url) {
    // Set the browser window's location to the incoming URL
    window._content.document.location = url;
    // Make sure that we get the focus
    window.content.focus();
}

最佳答案

检查LOAD_INITIAL_DOCUMENT_URI标志,如果有,则中止/重定向它。否则不要。如果此标志存在,则它是顶级页面。

编辑: 根据您的代码,您需要测试 QueryInterfaced 的 aSubject 是否具有如下所示的标志:

var oHttp = aSubject.QueryInterface(Components.interfaces.nsIHttpChannel);
if (oHttp.loadFlags & Components.interfaces.nsIHttpChannel.LOAD_INITIAL_DOCUMENT_URI) {
  //is top level load
} 

关于javascript - 重温 - 在 Firefox 中加载顶级页面之前修改 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26240124/

相关文章:

javascript - 在没有 tampermonkey 或其他的情况下执行用户脚本

javascript - 运行一次 window.onmousemove 函数

php - JavaScript/PHP : Get a Client's Month and Day with JS, 将值传递给 PHP 变量

javascript - linq.js Group By 那么Group By,怎么实现呢?

windows - Stream 3 句柄重定向导致输出溢出

windows - 在多个 zip 文件中搜索字符串

linux - 使用 Python 从 Linux 执行窗口应用程序

ios - 如何将输入数据的文本字段传递到 swift 上的 url

regex - Notepad++、Posix 正则表达式和 URL(用于获取域的正则表达式)

php - 从 obj c 的 URL 中删除 %2520 和其他非标准字符