使用Google框时,函数调用无法在Firefox扩展的Javascript代码中使用

时间:2011-06-27 08:02:04

标签: javascript firefox javascript-events firefox-addon

我已经编写了一些工作正常的代码,但是由于未知原因,函数不起作用(该函数不会被调用,就好像不存在一样)。

我的代码的目的是检测我是否使用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);

1 个答案:

答案 0 :(得分:1)

这应该适用于像

这样的地址
http://domain.com/page.php?http://www.google.fr=something

在displayUrl中,您要检查提供给getUrlVars()的网址的第一个GET参数的密钥是否与 http://www.google.fr 相匹配。我想这不是你想要的^^