我的任务是确定是否可以使用javascript检测链接点击次数。
我知道onclick属性,它让我成为那里的一部分。除此之外,我不知道最好的方法是什么。我已经告诉我的老板,它可能涉及某种形式的ajax,这可能涉及一个大型图书馆,这是不可接受的。
有没有其他方法可以使用ajax,或者无论如何使用不会增加很多时间的ajax?
编辑:他希望能够告诉用户有多少次使用网站主页上的链接。不幸的是,我们无法做一个光滑的服务器端解决方案,因为网站上的几乎所有页面都只是普通的HTML。我希望将所有页面转换为php或其他替代方案,只需记下HTTP_REFERRER数据,但目前无法实现。
我们已经在使用Google分析;它不会记录引荐来源数据。
再次编辑:事实证明我的老板没有看到叠加层,我认为他点击了所有标签。根据我的调查,最初他们都报告零点击,但我发现我们已经有旧版谷歌的分析模糊了。快速升级到新的热点,问题就解决了。
感谢所有回复。
答案 0 :(得分:8)
实际上,Google Analytics会跟踪这些数据。如果您转到报告的内容概述页面,则会显示网站覆盖图的链接。这将显示您的网站覆盖了页面上每个链接的点击次数。
site overlay example http://okay-plus.com/dropbox/img/site_overlay.jpg
答案 1 :(得分:3)
如果这是关于网站使用情况的数据收集,您是否考虑过Google Analytics?
答案 2 :(得分:2)
jQuery.min.js的大小为30k或以下。那不算大。
为什么你的老板想要监控链接点击呢?如果是您自己网站上的网址,那么您应该能够从访问日志或Google Analytics(或者该信息的一些更有用的变体)中获取该网址。
答案 3 :(得分:2)
不会讨论这是否是一个好主意,但这里有一些代码可以解决你的标题问题。
正如你自己说的那样,onclick事件是一种可行的方法。您需要创建一个循环遍历a标签的脚本,并为它们分配onclick事件。像这样:
<script type="text/javascript">
window.onload = function() {
var a = document.getElementsByTagName("a");
for(var i=0; i < a.length; i++ ){
a[i].onclick = function() { alert("link clicked"); };
}
}
</script>
如果你想告诉服务器有关点击的信息,你需要一个AJAX调用而不是警告:)那个片段会进入head部分工作。
另一种解决方法是听一般window.onclick事件并跟踪被点击的对象,如果它是一个标签,你可以执行你想要的任何代码。
答案 4 :(得分:1)
出于某种原因,如果您无法使用谷歌分析,请尝试处理window.onclick事件,并从事件对象中读取src元素。这将告诉您触发click事件的对象。 (我相信键盘和鼠标都会触发点击。
仅针对IE编写的示例代码。如果您需要其他浏览器,则可能需要修改代码
document.onclick = function()
{
alert(window.event.srcElement.id);
}
答案 5 :(得分:1)
如果您最终使用jQuery(如此推荐的海报之一),您可以相当轻松地拦截所有链接。例如,如果您想要计算每个链接被点击的次数(由id索引),您可以编写如下代码:
var clickCount = [];
$('a').click(function() { clickCount[$(this).attr("id")]++; return true; });
答案 6 :(得分:1)
除Google Analytics之外,您可能还希望查看ClickTale。它提供了网站覆盖以及谷歌没有的一些功能。
答案 7 :(得分:1)
顺便说一句,您还可以标记外部链接并让GA跟踪它们:
答案 8 :(得分:0)
您可能希望查看的另一个很棒的工具是http://mouseflow.com。鼠标跟踪,视频播放和热图。
答案 9 :(得分:0)
在 RXJS 中:
import { fromEvent } from 'rxjs';
const source = fromEvent(document, 'click').pipe(
filter(value => (value as any).toElement.localName === 'a'),
map(value => (value as any).toElement)
).subscribe(value => {
track('Clicked Outbound Link', {link: value.href})
})