在Cookie中存储解析的URL不存储整个值

问题描述

TL; DR:我被迫使用JavaScript解决方案将URL参数存储为cookie,但是当函数运行时,它仅存储我需要的值的前5个字符。

我正在努力实现跨域的会员销售跟踪。如上所述,我需要将URL中的值存储在cookie中,以便以后可以将其拉入单独的(起作用的)脚本中。在我的主域中,我能够使用简单的.PHP脚本来执行此操作,但是我们用于销售的第三方平台不允许我运行.PHP脚本,因此我发现了一个似乎是在今天之前工作。就是说,在今天之前,我使用的测试参数仅为数字(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上需要的功能How to get parameter name?,并用以下代码替换了我的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',{ expires: 30 });
    }

感谢那些提供帮助和见解的人。

解决方法

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