Сохранение проанализированного URL-адреса в файле cookie (без сохранения всего значения)

TL;DR: я вынужден использовать решение javascript для хранения параметра URL в виде файла cookie, но когда функция запускается, она сохраняет только первые 5 символов нужного мне значения.

Я работаю над внедрением отслеживания партнерских продаж в разных доменах. Как указано выше, мне нужно сохранить значение из URL-адреса в файле cookie, чтобы позже я мог извлечь его в отдельный (работающий) скрипт. На моем основном домене я смог сделать это с помощью простого скрипта .php, но сторонняя платформа, которую мы используем для наших продаж, не позволяет мне запускать скрипты .php, поэтому я нашел функцию javascript, которая казалась работает до сегодняшнего дня. Тем не менее, до сегодняшнего дня я использовал параметры теста, которые были только числовыми (1234567890 и т. д.).

Вот пример типа используемого URL и параметра:

https://subdomain.platform-domain.com/subscribe/Product_ID?irclickid=QW6QnmxpdxySWmnwUx0Mo6bwUkEx5HXJxUUm0c0

Это функция, которую я успешно использовал до сих пор:

    function getParameterByName(name) {
      name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
      var regex = new RegExp('[\\?&]' + name + '=([^&#]*)'),
          results = regex.exec(location.search);
      return results === null
        ? ''
      : decodeURIComponent(results[1].replace(/\+/g, ' '));
    }
    var results = getParameterByName('irclickid');
    if (results != null || results != '') {
      Cookies.set('irclickid', results, { expires: 30 });
    }

По какой-то причине функция теперь сохраняет только первые 5 символов значения, или в данном случае QW6Qn. Любая помощь или указание о том, как сделать эту работу правильно, приветствуется.

Решение:

Я нашел функцию, которая больше подходила для того, что мне было нужно здесь, в stackoverflow: Как получить имя параметра? и заменил первую часть моего javascript на следующий, и теперь он работает как положено!

function getParameterByName(name, url) {
    if (!url) url = window.location.href;
    name = name.replace(/[\[\]]/g, "\\$&");
    var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
        results = regex.exec(url);
    if (!results) return null;
    if (!results[2]) return '';
    return decodeURIComponent(results[2].replace(/\+/g, " "));
}

Последний раздел остался прежним:

    var results = getParameterByName('irclickid');
    if (results != null || results != '') {
      Cookies.set('irclickid', results, { expires: 30 });
    }

Спасибо тем, кто предложил помощь и понимание.


person notstoopid    schedule 27.10.2020    source источник


Ответы (1)


const url = new URL('https://subdomain.platform-domain.com/subscribe/Product_ID?irclickid=QW6QnmxpdxySWmnwUx0Mo6bwUkEx5HXJxUUm0c0')

document.cookie = `irclickid=${url.searchParams.get('irclickid')}; expires=...`

Вы можете увидеть на https://caniuse.com/url, поддерживают ли все необходимые браузеры URL.

person Iyashi    schedule 27.10.2020
comment
Спасибо за ответ. Я не знаю, сработает ли это, потому что вы указываете домен в сценарии. Я должен тянуть это динамически, верно? - person notstoopid; 27.10.2020
comment
Вы можете использовать document.URL для получения текущего URL. (но я не знаю, есть ли он во всех браузерах.) - person Iyashi; 27.10.2020