Firefox Addon - 当域匹配某种模式时更改地址栏 url
Firefox Addon - Change address bar url when domain matches some pattern
我想知道当 domain
匹配某些 pattern
时如何更改 address bar url
? url 必须在加载 url 之后更改。我尝试了以下代码。它有效,但有时无效。也许取决于加载速度,我不知道。我的意思是这段代码不太一致。我认为它可以增强。也许使用 observer
和: http-on-examine-response
怎么样?我正在寻找一致的代码。
var {getMostRecentBrowserWindow} = require("sdk/window/utils");
var {Cc, Ci, Cu} = require("chrome");
var domain = "yahoo.com";
var display_url = "http://www.mybeautifulemail.com"
function change_addressbar_url(url) {
var ioService = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
var uri = ioService.newURI(url, null, null);
var win = getMostRecentBrowserWindow();
win.gBrowser.webNavigation.setCurrentURI(uri);
}
var win = getMostRecentBrowserWindow();
win.gBrowser.addEventListener("DOMContentLoaded", function () {
var url_regexp = new RegExp(escape_regexp(domain)+"$", "i");
if (this.currentURI.host.match(url_regexp))
change_addressbar_url(display_url);
}, false);
function escape_regexp(str) {
return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\^$\|]/g, "\$&");
}
非常感谢!
[代码修订 001]
var {getMostRecentBrowserWindow} = require("sdk/window/utils");
var {Cc, Ci, Cu} = require("chrome");
var domain = "yahoo.com";
var display_url = "http://www.mybeautifulemail.com"
function escape_regexp(str) {
return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\^$\|]/g, "\$&");
}
function change_addressbar_url(url, tab) {
var ioService = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
var uri = ioService.newURI(url, null, null);
tab.linkedBrowser.webNavigation.setCurrentURI(uri);
}
var win = getMostRecentBrowserWindow();
win.gBrowser.addEventListener("DOMContentLoaded", function (e) {
var contWin = e.target;
if (contWin.top) {
return; // this is a frame load so ignore it
}
var contDoc = contWin.document;
var DOMWin = contWin.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIWebNavigation)
.QueryInterface(Ci.nsIDocShellTreeItem)
.rootTreeItem
.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIDOMWindow);
console.log("... CODE NEVER ARRIVES THIS POINT");
var gBrowser = DOMWin.gBrowser;
var tab = gBrowser._getTabForContentWindow(contWin);
var url_regexp = new RegExp(escape_regexp(domain) + "$", "i");
if (tab.linkedBrowser.currentURI.host.match(url_regexp)) {
change_addressbar_url(display_url, tab);
console.log("... host matched pattern!");
}
}, false);
您的问题是第 win.gBrowser.webNavigation.setCurrentURI
行以及 if (this.currentURI.host.match(url_regexp))
这些行在 window 中当前选定的选项卡上起作用。您需要做的是获取正确的选项卡元素,然后在该选项卡上设置 uri,如下所示:win.gBrowser.tabContainer.childNode[0].linkedBrowser.webNavigation.setCurrentURI
将在选项卡 1 中设置地址栏,注意 .childNode[0]
这就是您获得正确标签的方式:
var win = getMostRecentBrowserWindow();
win.gBrowser.addEventListener("DOMContentLoaded", function (e) {
var contWin = e.originalTarget.defaultView;
if (contWin.fameElement) {
// this is a frame load so ignore it
return;
}
var contDoc = contWin.document;
var DOMWin = contWin.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIWebNavigation)
.QueryInterface(Ci.nsIDocShellTreeItem)
.rootTreeItem
.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIDOMWindow);
var gBrowser = DOMWin.gBrowser;
var tab = gBrowser._getTabForContentWindow(contWin);
var url_regexp = new RegExp(escape_regexp(domain)+"$", "i");
if (tab.linkedBrowser.currentURI.host.match(url_regexp))
change_addressbar_url(display_url, tab);
}, false);
function change_addressbar_url(url, tab) {
var ioService = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
var uri = ioService.newURI(url, null, null);
tab.linkedBrowser.webNavigation.setCurrentURI(uri);
}
我想知道当 domain
匹配某些 pattern
时如何更改 address bar url
? url 必须在加载 url 之后更改。我尝试了以下代码。它有效,但有时无效。也许取决于加载速度,我不知道。我的意思是这段代码不太一致。我认为它可以增强。也许使用 observer
和: http-on-examine-response
怎么样?我正在寻找一致的代码。
var {getMostRecentBrowserWindow} = require("sdk/window/utils");
var {Cc, Ci, Cu} = require("chrome");
var domain = "yahoo.com";
var display_url = "http://www.mybeautifulemail.com"
function change_addressbar_url(url) {
var ioService = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
var uri = ioService.newURI(url, null, null);
var win = getMostRecentBrowserWindow();
win.gBrowser.webNavigation.setCurrentURI(uri);
}
var win = getMostRecentBrowserWindow();
win.gBrowser.addEventListener("DOMContentLoaded", function () {
var url_regexp = new RegExp(escape_regexp(domain)+"$", "i");
if (this.currentURI.host.match(url_regexp))
change_addressbar_url(display_url);
}, false);
function escape_regexp(str) {
return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\^$\|]/g, "\$&");
}
非常感谢!
[代码修订 001]
var {getMostRecentBrowserWindow} = require("sdk/window/utils");
var {Cc, Ci, Cu} = require("chrome");
var domain = "yahoo.com";
var display_url = "http://www.mybeautifulemail.com"
function escape_regexp(str) {
return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\^$\|]/g, "\$&");
}
function change_addressbar_url(url, tab) {
var ioService = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
var uri = ioService.newURI(url, null, null);
tab.linkedBrowser.webNavigation.setCurrentURI(uri);
}
var win = getMostRecentBrowserWindow();
win.gBrowser.addEventListener("DOMContentLoaded", function (e) {
var contWin = e.target;
if (contWin.top) {
return; // this is a frame load so ignore it
}
var contDoc = contWin.document;
var DOMWin = contWin.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIWebNavigation)
.QueryInterface(Ci.nsIDocShellTreeItem)
.rootTreeItem
.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIDOMWindow);
console.log("... CODE NEVER ARRIVES THIS POINT");
var gBrowser = DOMWin.gBrowser;
var tab = gBrowser._getTabForContentWindow(contWin);
var url_regexp = new RegExp(escape_regexp(domain) + "$", "i");
if (tab.linkedBrowser.currentURI.host.match(url_regexp)) {
change_addressbar_url(display_url, tab);
console.log("... host matched pattern!");
}
}, false);
您的问题是第 win.gBrowser.webNavigation.setCurrentURI
行以及 if (this.currentURI.host.match(url_regexp))
这些行在 window 中当前选定的选项卡上起作用。您需要做的是获取正确的选项卡元素,然后在该选项卡上设置 uri,如下所示:win.gBrowser.tabContainer.childNode[0].linkedBrowser.webNavigation.setCurrentURI
将在选项卡 1 中设置地址栏,注意 .childNode[0]
这就是您获得正确标签的方式:
var win = getMostRecentBrowserWindow();
win.gBrowser.addEventListener("DOMContentLoaded", function (e) {
var contWin = e.originalTarget.defaultView;
if (contWin.fameElement) {
// this is a frame load so ignore it
return;
}
var contDoc = contWin.document;
var DOMWin = contWin.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIWebNavigation)
.QueryInterface(Ci.nsIDocShellTreeItem)
.rootTreeItem
.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIDOMWindow);
var gBrowser = DOMWin.gBrowser;
var tab = gBrowser._getTabForContentWindow(contWin);
var url_regexp = new RegExp(escape_regexp(domain)+"$", "i");
if (tab.linkedBrowser.currentURI.host.match(url_regexp))
change_addressbar_url(display_url, tab);
}, false);
function change_addressbar_url(url, tab) {
var ioService = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
var uri = ioService.newURI(url, null, null);
tab.linkedBrowser.webNavigation.setCurrentURI(uri);
}