我正在尝试将参数“ referer =”添加到与新会话的流量引用有关的URL中。
我使用了this topic中的一些代码...但是它不断循环加载页面 ...然后,URL就像:
https://example.com?refere=facebookreferer=facebookreferer=facebook
注意:
我一直在使用此解决方案1:
function addOrUpdateUrlParam(name, value)
{
var ref = document.referrer;
var refsplit = ref.split(".")[1];
var href = window.location.href;
var regex = new RegExp("[&\\?]" + name + "=");
if(regex.test(href))
{
regex = new RegExp("([&\\?])" + name + "=\\d+");
{
else
{
if(href.indexOf("?") > -1)
window.location.href = href + "&" + name + "=" + value;
else
window.location.href = href + "?" + name + "=" + value;
}
if (refsplit != "example") {
return addOrUpdateUrlParam("referer", refsplit);
}
}
以及此解决方案2:
function () {
var ref = document.referrer;
var refsplit = ref.split(".")[1];
if (refsplit != "example") {
return location.search += "referer=" + refsplit;
}
}
编辑1:感谢Prasanth,我将代码改进为:
function () {
var ref = document.referrer;
var refsplit = ref.split(".")[1];
var currentUrl = location.href;
var url1 = currentUrl += "?referer="+refsplit;
var url2 = currentUrl += "&referer="+refsplit;
if(currentUrl.indexOf("?") < 0) {
return window.location = url1;
} else {
return window.location = url2;
}
}
但是,它同时返回两个条件:
https://example.com/?referer=facebook&referer=facebook
编辑2:因此,经过多次尝试,我通过使用url(location.search)的参数而不是完整url(location.href):
实现了此目标。function addRefererParam () {
var ref = document.referrer; //Get Referrer
var refDomain = ref.match(/[^(?:http:\/\/|www\.|https:\/\/)]([^\/]+)/i)[0]; //Extract Referrer Domain name for better readability
var params = location.search; //Get Url parameters
if (refDomain.match(/mydomain|null|undefined/i)) { //check if domain not null or own domain.
return params ;
} else {
return params += "utm_source=" + refDomain; //create new query string with referrer domain
}
}
但是,不能通过浏览使持久查询字符串...如何使新参数持久化?
获取当前窗口的URL,然后在域名后用&referer = value合并您的URL。
var currentUrl = location.href;
var paramsInUrl = currentUrl.split('&');
var flag = true;
for(var i in paramsInUrl)
{
if(!paramsInUrl[i].includes('referer=')
{
continue;
}
else
{
flag = false;
break;
}
}
if(flag)
{
currentUrl += '&referer='+value;
window.location = currentUrl;
}
关于它的价值(因为通常如何执行此操作的更笼统的问题是导致我进入此职位的原因),我制作了一个178字节的辅助函数,该函数接受要添加的查询参数的对象到GET请求的网址(采用与您向请求添加标头的方式类似的格式),并在此处为它制作了npm包:https://www.npmjs.com/package/add-query-params-to-url
希望这对某些人有帮助。