使用javascript向网址添加参数

时间:2019-02-11 11:15:15

标签: javascript replace parameters url-rewriting url-parameters

我正在尝试将参数“ referer =” 添加到我的网址中,该网址对应于新会话的流量引用。

我使用了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
}
}

但是,这不能通过浏览来创建持久查询字符串...我如何才能使新参数持久化?

2 个答案:

答案 0 :(得分:1)

获取当前窗口的网址,然后在域名后用&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; 
}

答案 1 :(得分:1)

关于它的价值(因为通常如何执行此操作的更笼统的问题是导致我发此帖子的原因),我制作了一个178字节的辅助函数,该函数接受您要查询的对象的对象添加到GET请求的网址(格式与您向请求中添加标头的方式类似),并在此处制作了npm软件包:https://www.npmjs.com/package/add-query-params-to-url

希望这对某些人有帮助。