2017-06-20 29 views
0

我正在使用beforeunload事件来作为代理指向我的网站上的点击量的手段。例如,如果beforeunloadclick事件的〜50ms内触发,我可以确定用户何时选择了链接。针对iOS之前的预载和页面隐藏点击时间

iOS变得很复杂,因为它不支持beforeunload。根据Apple文档,我用pagehide代替beforeunload,但这不具有相同的功能。看起来好像pagehide取代了unload - NOT beforeunload。在我的测试中,他们的发射时间平均相差约1500ms(pagehide触发远远晚于beforeunload)。这使归因于pagehide事件点击非常困难。

iOS上的safari是否支持任何可以接近beforeunload的触发时间的事件?

注:我知道这并不理想,还有其他更好的方法,我可能最终会追求,但我仍然对此感到好奇。

回答

2

理论上pagehide在safari中取代beforeunload,但实际上并非如此。由于正确观察到的触发时间pagehide事件可能会有所不同,因为Safari会在后台获取新页面,并且页面可用时会触发pagehide

没有事件,如果你正在寻找一个,但有这个黑客,你可以尝试,只要点击发生safari停止运行​​。所以你可以尝试这样的事情,因为点击发生了记录clickTs并开始记录​​函数中的时间戳,现在当pageHide触发时,您只需检查clickTseventlastReqAnimTime之间的时间差,它应该大致在500毫秒之间。这样,您就可以通过属性clickpageHide

var w = window, 
reqAnim = null, 
clickTs = 'record this when click happens', 
eventlastReqAnimTime = +new Date, 
logReqAnim = function() { 
    eventlastReqAnimTime = +new Date; 
    reqAnim = w.requestAnimationFrame(logReqAnim) 
}; 
reqAnim = w.requestAnimationFrame(logReqAnim); 
setTimeout(function() { 
    w.cancelAnimationFrame(reqAnim); 
}, 1500) 
w.addEventListener('pagehide', function(){ 
    if(Math.abs(clickTs - eventlastReqAnimTime) < 500){ 
     console.log('your link was chosen') 
    } 
}) 

注:上面的代码只是伪,运行前的测试。