我已经编写了一些工作正常的代码,但是由于未知原因,函数不起作用(该函数不会被调用,就好像不存在一样)。
我的代码的目的是检测我是否使用Google搜索引擎。它的工作方式是这样的:当用户在Google搜索字段上输入关键字并输入或点击"搜索"网址发生变化,我的代码检测到它,并显示带有网页网址的Javascript提醒,另一个显示带有文字的#34;它匹配"。
但问题是,当我直接在Google框中输入关键字时,它不再有效。
我的代码:
function displayUrl(url)
{
if(url[0].match(/^http:\/\/www\.google\.fr/))
{
alert('It matches');
}
}
function getUrlVars(href)
{
var vars = [], hash;
var hashes = href.slice(href.indexOf('?') + 1).split('&');
for(var i = 0; i < hashes.length; i++)
{
hash = hashes[i].split('=');
vars.push(hash[0]);
vars[hash[0]] = hash[1];
}
displayUrl(vars);
}
var myExt_urlBarListener = {
QueryInterface: function(aIID)
{
if (aIID.equals(Components.interfaces.nsIWebProgressListener) ||
aIID.equals(Components.interfaces.nsISupportsWeakReference) ||
aIID.equals(Components.interfaces.nsISupports))
return this;
throw Components.results.NS_NOINTERFACE;
},
onLocationChange: function(aProgress, aRequest, aURI)
{
myExtension.processNewURL(aURI);
},
onStateChange: function(a, b, c, d) {},
onProgressChange: function(a, b, c, d, e, f) {},
onStatusChange: function(a, b, c, d) {},
onSecurityChange: function(a, b, c) {}
};
var myExtension = {
oldURL: null,
init: function() {
// Listen for webpage loads
gBrowser.addProgressListener(myExt_urlBarListener,
Components.interfaces.nsIWebProgress.NOTIFY_LOCATION);
},
uninit: function() {
gBrowser.removeProgressListener(myExt_urlBarListener);
},
processNewURL: function(aURI) {
if (aURI.spec == this.oldURL)
return;
// now we know the url is new...
alert(aURI.spec);
/*
the following function call doesn't work
when I type the keyword in the Google box instead of using the Google
traditionnal search field
*/
getUrlVars(aURI.spec);
this.oldURL = aURI.spec;
}
};
window.addEventListener("load", function() {myExtension.init()}, false);
window.addEventListener("unload", function() {myExtension.uninit()}, false);
答案 0 :(得分:1)
这应该适用于像
这样的地址http://domain.com/page.php?http://www.google.fr=something
在displayUrl中,您要检查提供给getUrlVars()的网址的第一个GET参数的密钥是否与 http://www.google.fr 相匹配。我想这不是你想要的^^