0

サンプルコードがあります:

function getKeyword() {
    var instance = this;
    var googlePattern = /(www\.google\..*)/;

    this.params = function(parameters) {
        var result = [];
        var params = parameters.split("&");
        for(var p in params) {
            var kv = params[p].split("=");
            result[kv[0]] = kv[1];
        }
        return result;
    };

    this.googleKeywords = function(params){
        var query = params["q"];
        var pattern = /"(.*?)"|(\w+)/g;
        return decodeURIComponent(query).replace(/\+/g, " ").match(pattern);
    };

    this.parseReferrer = function(){
        var result = [];
        var pathAndParams = document.referrer.split("?");
        if(pathAndParams.length == 2) {
            var path = pathAndParams[0];
            var params = this.params(pathAndParams[1]);
            if(path.search(googlePattern) > 0) {
                result = this.googleKeywords(params);
            }
        }
        return result;   
    };

    return this.parseReferrer();
}

その後:

<script type="text/javascript">
    if (document.referrer && document.referrer != "") {
        if (document.referrer.search(/google\.*/i) != -1){
            var keyword = getKeyword();
            alert(keyword);
        } else {
            alert('Not search from google');
        }
    } else {
        alert('Not referrer');
    }
    </script>

例:キーワードが「iphone5」の場合、結果にalert( "iphone 5")が表示されませんか?それを修正する方法は?

4

1 に答える 1

0

JavaScriptfor inコンストラクトは、配列内のエントリ以上のものをループします。使用for inする場合は、実際のパラメーターのみを処理していることを確認する必要があります。これは、次のことを確認することで最も簡単に実行できhasOwnPropertyます。

this.params = function(parameters) {
  var result = [];
  var params = parameters.split("&");
  for(var p in params) {
    if (params.hasOwnProperty(p))
    {
      var kv = params[p].split("=");
      result[kv[0]] = kv[1];
    }
  }
  return result;
};

forまたは、配列に対して通常のループを使用することもできます。

this.params = function(parameters) {
  var result = [];
  var params = parameters.split("&");
  for(var i=0; i < params.length; i++) {
    var kv = params[i].split("=");
    result[kv[0]] = kv[1];
  }
  return result;
};
于 2012-12-06T15:15:51.337 に答える