用javascript改进这个搜索引擎检测器

时间:2011-01-26 19:16:24

标签: javascript regex

我有以下代码,用于检测使用了哪个搜索引擎和搜索词:

if (document.referrer.search(/google\.*/i) != -1) {
    var start = document.referrer.search(/q=/);
    var searchTerms = document.referrer.substring(start + 2);
    var end = searchTerms.search(/&/);
    end = (end == -1) ? searchTerms.length : end;
    searchTerms = searchTerms.substring(0, end);
    if (searchTerms.length != 0) {
        searchTerms = searchTerms.replace(/\+/g, " ");
        searchTerms = unescape(searchTerms);
        alert('You have searched: '+searchTerms+' on google');
    }
}

这确实有效,但遗憾的是它有时无法正常工作。

有时,如果引荐人甚至不是Google,我会收到搜索字词的警告:ttp://www.domain.com(开头没有H)我认为这可能会导致错误。

感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

您是否尝试过利用现有的JS URL解析方案?它可能会为您节省大量时间。例如:

http://blog.stevenlevithan.com/archives/parseuri

答案 1 :(得分:1)

它正在削减“h”,因为q=不在引用者字符串中。所以你的start变量是-1。然后你添加2来获得带有子串的searchTerms var。您需要检查start是否等于-1并返回。

我也认为你的“谷歌”字符串检测不是防弹的,我宁愿做这样的事情......

var ref = document.referrer;
var pcol = ref.indexOf("://") + 3;

if(ref.indexOf("google.com") == pcol || ref.indexOf("www.google.com") == pcol) {
  // It is google
}

最后,您应该使用decodeURIComponent代替unescape