加载新页面时快速重定向选项卡的方法
Fast way to redirect tab when new page is loading
我试图重定向一个选项卡到一个新的页面,当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 (...)
的好方法?
我最后找到了最好的方法:
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);
}
credit where credit is due: matagus回答Andrew的问题
[1]:链接:拦截页面加载
[2]: Noitidart: 'from topics:如何在Firefox的一个选项卡中更改用户代理?是否有可能知道一个HTTPRequest的目标DOMWindow ?'
以前从未使用过sdk/tabs
,但是您可以隐藏加载您的内容。
一旦你的页面加载你的logShow
函数将运行。
然后在这个函数中构建一些"显示主体"的功能。
相关文章:
- 在新选项卡中打开链接,但不使用_blank方法
- Dynamics 2016内部部署Crm客户端脚本.选项集控件类型缺少方法
- 在 JavaScript 中识别浏览器选项卡的任何方法
- 声明JavaScript选项对象的正确方法
- 为什么当我指定POST时,即使我已经尝试了类型和方法选项,我的ajax代码仍然会触发GET请求
- Javascript;html:有没有一种方法可以找到一个顶级的命名窗口(或选项卡)并将其带到前台,而不是将url加载到
- Knockout mapping用于ko.mapping.toJSON()的选项-方法
- 何时使用which-多个方法、多个参数或一个选项参数
- 有没有任何方法可以通过编程将浏览器选项卡放在前面(跨浏览器)
- 主干获取请求是选项方法
- 如何根据所选选项调用实例方法
- 提交后从选择下拉列表中自动选择选项的最佳方法
- 在 React-Leaflet 库中为
- 不支持请求方法“选项” - Spring 引导应用程序
- JavaScript - 有没有更有效的方法来创建选项元素
- 使用JQuery构建选项卡,这是最高效和最有效的方法
- 使用此 javascript 在 IE7 中收到“对象不支持此属性或方法”错误,以及选项卡未正确定位的问题
- 在JavaScript中调用其他选项方法
- jQuery UI小部件缺失选项方法
- 选项方法不允许,CORS到Google Drive