我要做的是记录给定网页上的所有用户活动,因此我使用socket.io
将页面上注册的事件发送到服务器,如下所示: / p>
$(document).on('click.mynamespace', function(event){
var elem = event.target;
socket.emit('my-message', { 'element' : elem };
}
我面临的问题是目标元素是这种<a href="#" onclick="someFunctionThatRedirects()">My link</a>
的链接。在正确执行socket.emit
语句之前,调用任何函数并卸载页面(断开我的套接字)。
我想让它尽可能地普及,因为它将作为插件工作,并希望它适应任何我无法控制的环境。
那么,有没有办法“高举”所有点击事件,先用我的自定义函数发送它们,然后继续“正常”执行,无论它是什么?
修改
似乎只有FF(在14.0.1
上测试)导致socket.emit
事件无法完成。 Chrome 21.0.x
似乎正在运作,但不确定这是不是“偶然”。
编辑2
函数someFunctionThatRedirects
实际上以这种方式重定向window.location.ref = clickedurl
答案 0 :(得分:0)
事件泡沫向上,因此clicked元素会在socket.emit
之前触发事件,您可以更改函数的工作方式,使其按照您想要的顺序执行操作
function someFunctionThatRedirects(){
window.redirectTo = 'myNewPage';
}
$(document).on('click.mynamespace', function(event){
var elem = $(event.target)[0];
socket.emit('my-message', { 'element' : elem };
if(window.redirectTo !== undefined) window.location.href = window.redirectTo;
}