Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript-检查哈希,忽略以下分析代码_Javascript_Url_Hash_Analytics - Fatal编程技术网

Javascript-检查哈希,忽略以下分析代码

Javascript-检查哈希,忽略以下分析代码,javascript,url,hash,analytics,Javascript,Url,Hash,Analytics,我们正在将视频添加到网站主页,并希望在URL中出现视频标记时,能够在lightbox样式的容器中自动弹出视频: http://www.domain.comvideo 如果在网站内部点击链接,视频需要弹出,即:如果页面加载时URL中存在哈希,视频也需要弹出 很容易使用window.location.hash检查URL中的散列,或者在单击带有散列的链接并启动相关javascript函数时检查散列。这是预期的工作没有任何问题 但是,由于此URL将在电子邮件中发送,并自动添加谷歌分析代码,因此分析代码将

我们正在将视频添加到网站主页,并希望在URL中出现视频标记时,能够在lightbox样式的容器中自动弹出视频:

http://www.domain.comvideo

如果在网站内部点击链接,视频需要弹出,即:如果页面加载时URL中存在哈希,视频也需要弹出

很容易使用window.location.hash检查URL中的散列,或者在单击带有散列的链接并启动相关javascript函数时检查散列。这是预期的工作没有任何问题

但是,由于此URL将在电子邮件中发送,并自动添加谷歌分析代码,因此分析代码将附加到URL的末尾:

http://www.domain.comvideo?utm_source=...

因为分析代码会随着每次电子邮件活动而改变,所以我不能用简单的Javascript替换来忽略分析代码

我该如何检查URL中是否存在哈希,但忽略URL后面的任何内容?如果有

location.hash.match(/[^?]*/)

假设散列总是第一个,那么就应该这样做。

将散列放在查询参数之后的URL的正确形式不是吗?然后,location.hash变量将正常工作,您不需要特殊代码。您的URL应该如下所示,然后您可以直接使用location.hash,它将是视频:

我不建议将此作为解决方案,我认为您应该将URL固定为合法的,但您可以使用此代码解析URL的哈希值,即使它位于非法位置:

var matches = window.location.href.match(/#(.*?)(\?|$)/);
if (matches) {
    var hash = matches[1];
}

这段代码从字符串中提取到字符串或?以先到者为准。您可以在这里看到它在一堆测试URL上运行:。

这是对您的问题的字面回答,但在技术上有一个巨大的漏洞,您可以测试:

var h = window.location.hash;
var ind = h.indexOf( '?' );
var test = ind <0?h:h.substr(0, ind)

如果你想让谷歌分析发挥作用,你可能会遇到问题。规则是,a之后的所有内容都不会发送到服务器,这意味着您的分析可能会退出窗口。你需要确保你的散列被添加在所有Google内容之后。如果是,那么你就不必担心测试任何东西。

是的,但是分析代码是由电子邮件软件自动添加到所有URL的,因此它实际上不在我的控制之下。如果添加错误,我怀疑它是否会起作用。我想您需要在源代码处修复它。@adnrw-我在回答中添加了不依赖于window.location.hash对象行为的代码,该对象解析合法和非法URL以获取哈希值。谢谢您的帮助。看起来这是可行的。一旦Google Analytics准备好了,我会用它进行测试,看看跟踪是否被记录下来。我怀疑我能在这需要上线之前在源代码处修复它,但是如果分析不通过,我会把它作为一个bug向软件提供商第三方提出。对,我不知道。如上所述,分析代码是由电子邮件软件自动添加的,因此我无能为力。