我正在使用beforeunload
事件作为代理我网站点击量指标的方法。例如,如果beforeunload
在click
事件的约50毫秒内触发,我可以确定用户何时选择了链接。
iOS变得复杂,因为它不支持beforeunload
。根据Apple文档,我已将pagehide
替换为beforeunload
,但这不具有相同的功能。看起来好像pagehide
取代了unload
- NOT beforeunload
。在我的测试中,他们的射击时间平均相差约1500毫秒(pagehide
触发的时间远远晚于beforeunload
)。这使得pagehide
事件归因于点击非常困难。
iOS上的safari支持哪些事件可以接近beforeunload
的触发时间?
注意:我知道这不太理想,还有其他更好的方法,我可能会最终追求,但我仍然对此感到好奇。
答案 0 :(得分:2)
理论上pagehide
是Safari中beforeunload
的替代品,但实际上并非如此。正确观察到触发pagehide
事件的时间可能会有所不同,因为Safari会在后台抓取新页面,当页面可用时会触发pagehide
。
如果您正在寻找一个没有事件,但是只要点击发生safari停止运行requestAnimationFrame
,就会有这样的黑客攻击。所以你可以尝试这样的事情,因为点击发生记录clickTs
并开始在requestAnimationFrame
函数内记录时间戳,现在当pageHide
触发时你只需检查clickTs
和eventlastReqAnimTime
之间的时差。 click
,它应该大约在500毫秒之间。这样,您可以将pageHide
归因于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')
}
})
var textx = $(this).text();
$('.dropbtn').text(textx);
注意:上面的代码只是伪,运行前测试。