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

时间:2011-08-12 01:49:33

标签: javascript url hash analytics

我们正在向网站的主页添加视频,并且希望能够在网址中存在#video标记时自动弹出视频(在灯箱式容器中):

http://www.domain.com#video

如果在网站内部点击链接(例如:<a href="#video">),并且页面加载时网址中存在哈希值,则需要弹出视频。

使用window.location.hash或点击带有哈希的链接并触发相关的javascript函数时,可以轻松检查URL中的哈希值。这没有任何问题,按预期工作。

但是,由于此网址会在自动添加Google Analytics代码的电子邮件中发送,因此分析代码会附加到网址的末尾:

http://www.domain.com#video?utm_source=...

由于每个电子邮件广告系列的分析代码都会发生变化,因此我无法使用简单的Javascript replace()来忽略分析代码。

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

3 个答案:

答案 0 :(得分:0)

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

假设哈希始终是第一个,那应该这样做。

答案 1 :(得分:0)

在查询参数之后,是否有正确的URL形式?然后,location.hash变量将正常工作,您将不需要特殊代码。您的网址应如下所示,然后您可以直接使用location.hash #video

http://www.domain.com?utm_source=xxx#video

我不建议将此作为解决方案(我认为您应该将URL修复为合法的),但是您可以使用此代码来解析URL中的哈希值,即使它处于非法位置:

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

此代码从“#”中提取到字符串的两端或“?”以先到者为准。您可以在此处看到它在一堆测试网址上运行:http://jsfiddle.net/jfriend00/HuqL7/

答案 2 :(得分:0)

(这是对你的问题的字面答案,但有一个很大的问题)技术上,你可以测试:

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

如果您希望Google Analytics正常运行,则可能会遇到问题#。规则是#之后的所有内容都不会发送到服务器,这意味着您的Google Analytics可能会离开窗口。您需要确保在所有Google内容之后添加哈希值。如果是,那么你不必担心测试任何东西。