快速的方式来重定向标签,当新页面加载(Fast way to redirect tab when n

2019-10-20 12:32发布

我想,当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 (...)更早?

Answer 1:

终于找到了这样做的最佳方式:

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);
}

信贷,信用是由于: 答案通过matagus (对问题的问安德鲁 )

[1]:链接: 拦截页面加载
[2]: Noitidart :“从主题: 我怎样才能改变用户代理在Firefox只是一个标签? 和是否有可能知道一个HTTPRequest目标DOMWindow? “



Answer 2:

从来没有使用sdk/tabs之前,但你可以加载您的内容隐藏起来。

一旦你的页面加载你的logShow功能将运行。

然后建立这个功能有些“显示机构”的功能。



文章来源: Fast way to redirect tab when new page is loading