搜索现有查询参数但不添加“?”的jQuery脚本如果存在的话

时间:2015-03-02 15:21:02

标签: javascript jquery analytics optimizely

我目前正在使用以下代码添加"?skin = skin_name"每当有人登陆特定页面时都会显示网址。这允许我们加载不同的主题,我们将相互测试。

因此,如果有人登陆www.example.com,则此脚本(以优化方式运行)会将访问者重定向到www.example.com?skin=skin_name。

如果url中已存在?skin = skin_name,脚本还会保留?skin = skin_name。

if(window.location.href.indexOf('?skin=skin_name') > -1){

} else {
   /* _optimizely_redirect=http://custom */
var url = window.location,redirect_url = 'http://' + url.hostname + url.pathname + '?skin=skin_name' +url.search; 
window.location = redirect_url;

}

我遇到的问题是,当网址上已经包含广告系列参数时,它们会被脚本覆盖。

因此,如果现有网址是www.example.com?utm_source=test&utm_medium=test&utm_campaign=test

上述脚本导致网页加载为www.example.com?skin=skin_name?utm_source=test&utm_medium=test&utm_campaign=test,导致访问者在分析中被错误地跟踪。

我正在寻找的是一个会产生以下网址的脚本:

www.example.com?utm_source=test&utm_medium=test&utm_campaign=test **&安培;皮肤= SKIN_NAME **

当已经"?utm_source = test& utm_medium = test& utm_campaign = test"现在,但会产生

www.example.com?skin=skin_name当已经没有"?"存在于url中(所以在一种情况下,skin = skin_name使用"&"附加;在另一种情况下,使用"?&#34附加;取决于是否"?"首先出现。)

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

您可以在location.search属性中查看值

var query = window.location.search;

if( query.indexOf('skin=skin_name') === -1 ) {
    var sign = query.trim().length === 0 ? '?' : ':';

    window.location.search = sign + 'skin=skin_name';
}  else {
   /* _optimizely_redirect=http://custom */
}

答案 1 :(得分:0)

如果您尝试使用location.serach属性,如果URL中没有查询字符串,那么它应该更简单:

if (location.search) {
    // there is GET parameters already in href, use &
} else {
    // no parameters, use ?
}

根据查询字符串的值,您决定使用什么:?(还没有GET参数),或者&已经存在一些参数。

答案 2 :(得分:0)

if (location.href.indexOf("?") !== -1) {
    // There is/are querystring(s).
    // Hence, append yours, such as &key=val
} else {
    // No querystrings
    // Add yours, such as ?key=val
}