我想知道如何在加载时使用Firefox插件修改页面的URL。我被引导到诸如the following之类的建议。具体来说,当用户前往" https://www.google.com"通过地址栏,我想重定向到" https://www.google.co.uk"。
出于我的特定目的,上述解决方案几乎可行,但它重定向了太多的URL。我发现的一个问题如下:虽然我每次都可以重定向,但有时我会不想重定向。例如,似乎在Windows中,我不仅在当前标签的网址是常规Google时重定向,而且每当页面发出的某些查询包含上述链接时(例如新闻文章),我也会重定向。
有没有办法通过只检查当前标签的URL来使用Mozilla的观察框架进行重定向?如果没有,是否有一些替代解决方案仍然使用Mozilla的附加SDK?
编辑:以下是我的错误源代码。
var myObserver = {
register: function() {
var observerService = Components.classes["@mozilla.org/observer-service;1"]
.getService(Components.interfaces.nsIObserverService);
observerService.addObserver(this, TOPIC_MODIFY_REQUEST, false);
},
//observe function to capture the changed event
observe : function(aSubject, aTopic, aData) {
if (TOPIC_MODIFY_REQUEST == aTopic ) {
var url;
aSubject.QueryInterface(Components.interfaces.nsIHttpChannel);
url = aSubject.URI.spec;
url = encodeURIComponent(url);
if (url.indexOf("google.nl") !=-1 || url.indexOf("hl%3Dnl") !=-1
|| url.indexOf("google.com%2Fnl") !=-1 || url == "https%3A%2F%2Fwww.google.com"
|| url == "https%3A%2F%2Fwww.google.com%2Fncr" || url ==
"https%3A%2F%2Fwww.google.com%2F%3Fgws_rd%3Dssl")
{
aSubject.cancel(Components.results.NS_BINDING_ABORTED);
loadURL("https://www.google.co.uk/");
}
}
}
function loadURL(url) {
// Set the browser window's location to the incoming URL
window._content.document.location = url;
// Make sure that we get the focus
window.content.focus();
}
答案 0 :(得分:1)
检查LOAD_INITIAL_DOCUMENT_URI
标志,如果是,则中止/重新标记它。否则不要。如果此标志存在,则它是顶级页面。
编辑:
根据你的代码,你需要测试QueryInterface
的aSubject,如果它有这样的标志:
var oHttp = aSubject.QueryInterface(Components.interfaces.nsIHttpChannel);
if (oHttp.loadFlags & Components.interfaces.nsIHttpChannel.LOAD_INITIAL_DOCUMENT_URI) {
//is top level load
}