Я пытаюсь добавить параметр "реферер=" к своему URL-адресу, соответствующему рефереру трафика нового сеанса.
Я использовал часть кода из Эта тема... но он постоянно перезагружает страницу... тогда 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: Благодаря Прасант я улучшил код до:
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-адреса (местоположение.поиск) вместо полного 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
}
}
Однако это не создает постоянную строку запроса при просмотре... как я могу сделать новые параметры постоянными?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Получите URL-адрес текущего окна и после имени домена просто соедините свой URL-адрес с &referer=значение.
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;
}
Сохраните URL-адрес в переменной и разделите его с помощью &. Теперь у вас будут все параметры вместе со значением в массиве. Преобразуйте массив в строку, используя метод toString(). теперь проверьте (!if (parameters.includes("referer)). Если это условие возвращает true, вставьте мой ответ под оператором if
Спасибо... Выглядит отлично, и я почти уверен, что это должно работать... но сайт продолжает зацикливать параметр, и я не знаю, почему:
Возможно проблема на стороне сервера. Этот код отправит запрос GET на сервер, и если вы не обрабатывали запросы на получение на стороне сервера, могут возникнуть проблемы. Попробуйте отправить запрос на сервер от почтальона и проверьте, правильно ли он проходит. Если все прошло нормально, прокомментируйте полученный код состояния.
Если это сработало, отметьте мой ответ как проверенный. Тай
Что бы это ни стоило (поскольку более общий вопрос о том, как это сделать, как правило, привел меня к этому сообщению), я сделал 178-байтовую вспомогательную функцию, которая принимает объект параметров запроса, которые вы хотите добавить к URL для запроса GET (в формате, аналогичном тому, как вы можете добавлять заголовки к запросу) и сделал для него пакет npm здесь: https://www.npmjs.com/package/add-query-params-to-url
Надеюсь, это будет полезно для некоторых.
Это почти работает... на самом деле, иногда текущий URL-адрес еще не имеет какого-либо параметра... поэтому я изменил его с помощью... но он добавляет оба условия, например: example.com/&referer=facebook?referer=facebook