B4b4j1
B4b4j1

Reputation: 460

Adding a Parameter to Url with javascript

I am trying to add the parameter "referer=" to my url corresponding to the trafic referer of a new session.

I used some of the code from this topic... but it keeps reloading the page in a loop... then the url is like :

https://example.com?refere=facebookreferer=facebookreferer=facebook

Note:

I have been using this solution 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);
}
}

And this solution 2:

function () {
  var ref = document.referrer;
  var refsplit = ref.split(".")[1];
  if (refsplit != "example") {
return location.search += "referer=" + refsplit;
}
}

Edit 1: Thanks to Prasanth I improved the code to :

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;
   }
}

However, it is returning both conditions :

https://example.com/?referer=facebook&referer=facebook

Edit 2: So after many attempts, I achieved it by working with the parameters of the url (location.search) instead of the full 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
}
}

However, it is no making a persistent query string through browsing... how can I make the new parameters persistent ?

Upvotes: 1

Views: 9459

Answers (2)

Charles
Charles

Reputation: 455

For what it's worth (because the more generic question of just how to do this generally is what lead me to this post), I've made a 178 byte helper function that takes in an object of the query parameters you want to add to a url for a GET request (in similar format for how you might add headers to a request) and made an npm package for it here: https://www.npmjs.com/package/add-query-params-to-url

Hopefully this is helpful to some.

Upvotes: 1

Prasanth Ganesan
Prasanth Ganesan

Reputation: 551

Obtain the url of the current window and after the domain name just concat your url with &referer=value.

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; 
}

Upvotes: 1

Related Questions