Javascript 加载新页面时重定向选项卡的快速方法
当URL在加载之前与我的模式匹配时,我尝试将选项卡重定向到新页面。我提出的方法在页面的大部分加载完成后进行重定向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
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,对你的解决方案进行漂亮的编辑,这样它可以帮助未来的人。在帖子中,这看起来并不是真的完美地工作。。