1

每当有人登陆特定页面时,我目前正在使用以下代码将“?skin = skin_name”添加到url。这使我们能够加载我们正在相互测试的不同主题。

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

如果 ?skin=skin_name 已存在于 url 中,该脚本还会阻止附加 ?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;

}

我遇到的问题是,当 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=skin_name**

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

www.example.com?skin=skin_name 当已经没有“?”时 存在于 url 中(因此在一种情况下,skin=skin_name 使用“&”附加,而在另一种情况下,它使用“?”附加,具体取决于首先是否存在“?”)。

任何帮助是极大的赞赏。

4

3 回答 3

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 */
}
于 2015-03-02T15:26:02.697 回答
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
}
于 2015-03-02T15:26:36.990 回答
0

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

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

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

于 2015-03-02T15:24:13.673 回答