我目前正在使用以下代码添加"?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附加;取决于是否"?"首先出现。)
非常感谢任何帮助。
答案 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
}