问题描述
TL; DR:我被迫使用JavaScript解决方案将URL参数存储为cookie,但是当函数运行时,它仅存储我需要的值的前5个字符。
我正在努力实现跨域的会员销售跟踪。如上所述,我需要将URL中的值存储在cookie中,以便以后可以将其拉入单独的(起作用的)脚本中。在我的主域中,我能够使用简单的.PHP脚本来执行此操作,但是我们用于销售的第三方平台不允许我运行.PHP脚本,因此我发现了一个似乎是在今天之前工作。就是说,在今天之前,我使用的测试参数仅为数字(1234567890等)。
以下是所使用的URL和参数类型的示例:
这是我到目前为止一直成功使用的功能:
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
。