Javascript 加载新页面时重定向选项卡的快速方法

Javascript 加载新页面时重定向选项卡的快速方法,javascript,firefox-addon,firefox-addon-sdk,Javascript,Firefox Addon,Firefox Addon Sdk,当URL在加载之前与我的模式匹配时,我尝试将选项卡重定向到新页面。我提出的方法在页面的大部分加载完成后进行重定向 var tabs = require("sdk/tabs"); var tab_utils = require("sdk/tabs/utils"); function logShow(tab) { console.log(tab.url + " is loaded; " + pattern.test(tab.url)); if (pattern.test(tab.u

当URL在加载之前与我的模式匹配时,我尝试将选项卡重定向到新页面。我提出的方法在页面的大部分加载完成后进行重定向

var tabs = require("sdk/tabs");
var tab_utils = require("sdk/tabs/utils");

function logShow(tab) {
    console.log(tab.url + " is loaded; " + pattern.test(tab.url));
    if (pattern.test(tab.url)) {
        var lowLevelTab = viewFor(tab);
        console.log(tab_utils.setTabURL (lowLevelTab, newURL(tab.url)));

        // also simply replacing this bit with
        // tab.url = "foo" doesn't speed things up
    }
}

tabs.on('load', logShow);

早期调用
setTabURL(…)
有什么好方法吗?

以前从未使用过
sdk/tabs
,但您可以隐藏加载内容

页面加载后,
logShow
功能将运行

然后在这个函数中内置一些“显示身体”功能。

我终于找到了最好的方法:

function listener(event) {
    var channel = event.subject.QueryInterface(Ci.nsIHttpChannel);
    var url = event.subject.URI.spec;

    // Here you should evaluate the url and decide if make a redirect or not.
    if (pattern.test(url)) {
        // If you want to redirect to another url,
        // you have to abort current request, see: [1] (links below)
        channel.cancel(Cr.NS_BINDING_ABORTED);

        // Set the current gbrowser object (since
        // the user may have several windows/tabs)
        var goodies = loadContextGoodies(channel);
        var domWin = goodies.aDOMWindow;       // method suggested by
        var gBrowser = goodies.gBrowser;       // Noitidart [2] (links below)
        var browser = goodies.browser;         // for reference see comment below
        var htmlWindow = goodies.contentWindow;

        // and load the fixed URI
        browser.loadURI(newUrl(url));
    } else {
        // do nothing, let Firefox keep going on the normal flow
    }
}

exports.main = function() {
    events.on("http-on-modify-request", listener);
}
信用到期时的信用:由(根据要求)

[1] :链接:

[2] ::'来自topics:和'

,但在加载旧url之前,如何将选项卡重定向到其他位置?我只是尝试重定向选项卡,不显示任何其他内容。。还是我完全误解了你的意思?只是任何对sdk友好的快速重定向?很高兴与大家分享解决方案。但是这一行:
var gBrowser=utils.getMostRecentBrowserWindow().gBrowser
不是正确的方式,因为它获取最近窗口的选中选项卡(假设只有1个赢)。所以改为这样做:
var goodies=loadContextGoodies(频道);var domWin=goodies.aDOMWindow;var gBrowser=goodies.gBrowser;var browser=goodies.browser;var htmlWindow=goodies.contentWindow来自主题:如何在Firefox的一个选项卡中更改用户代理?谢谢你的提示,我会调整我的解决方案。第二个链接对我来说也很有用,因为我想检查请求是否来自地址栏。。对null的不同响应是否表明了这一点?我想那只是垃圾。因为我们通过goodies对象获得DOM窗口。但说真的,有没有办法把地址栏请求和页内请求分开?还有?你可以直接使用
频道,而不是
取消
ing,然后
浏览。loadURI
ing。重定向到
:+1,对你的解决方案进行漂亮的编辑,这样它可以帮助未来的人。在帖子中,这看起来并不是真的完美地工作。。