0

我已经成功地能够使用 Javascript 将 GUID 添加到 URL。这是我目前正在使用的代码:

    <script>  
  if ((navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i)) ||(navigator.userAgent.match(/iPad/i))) {
       function S4() { 
           return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);  
       }
    // then to call it, plus stitch in '4' in the third group
       guid = (S4() + S4() + "-" + S4() + "-4" + S4().substr(0, 3) + "-" + S4() + "-" + S4() + S4() + S4()).toLowerCase();
    //alert(guid);
      var lc = window.location;
       if (!(/\?guid=/.test(lc))) { 
          window.location = window.location + '?guid=' + guid 
      }
    }//End if iPhone
</script>

问题:

现在我想测试 URL 以查看它是否在 URL 中已经有一个查询字符串,如果有,则将 GUID 附加到查询字符串 URL 的末尾。我怎么做?

假设我有类似的查询字符串 URL 是这样的:http://mysite.com/mypage?query=http: //mysite.com/myotherpage

我想将 GUID 添加到查询 URL 的末尾,如下所示:

http://mysite.com/mypage?query=http://mysite.com/myotherpage&guid=123456789153456

注意:您可能会问我为什么要检测 iPhone/iPod/iPad 并向 URL 添加 GUID。这是因为 iOS 6.0+ 中的一个记录在案的疯狂错误/功能与 Mobile Safari 相结合,仍未通过“超级缓存”POST 调用修复。因此,添加 GUID 会迫使优秀的 ol' iToys 强制进行新的页面查找。讨厌破解这个,但我们尝试了 Pragma=no-cache、Expires=0 和 Cache-Control=no-cache,发现问题仍然存在。所以是的。

4

1 回答 1

1

你可能需要这个逻辑:

var current = window.location.search;
var addon = "";
if (current.charAt(0) !== "?") {    // Querystring Doesn't start with "?"
    addon += "?";
} else {    // Querystring does start with "?" (and maybe more)
    addon += current;
}
if (current.indexOf("guid=") < 0) {    // Querystring Doesn't contain "guid="
    if (current.length > 1) {    // Querystring Contains more than "?_"
        addon += "&";
    }
    addon += "guid=" + guid;
    window.location.href = window.location.protocol + "//" + window.location.host + window.location.pathname + addon;
}

所以它将检查查询字符串是否以“?”开头。如果没有,它会添加它。

如果查询字符串中有超过 1 个字符(意味着它不仅仅是“?”......类似于“?a”),那么它会添加一个“&”。

最后,它还添加了“guid=23482934”(任何值)。

所以场景是:

  • "" - 应该变成?guid=12355235
  • “?” - 应该成为?guid=12355235
  • "?asdf=fdsa" - 应该变成?asdf=fdsa&guid=12355235
于 2013-04-08T18:46:37.303 回答