gpt4 book ai didi

javascript - 在 iOS 上触发 beforeunload 与 pagehide 的时间

转载 作者:行者123 更新时间:2023-11-28 21:08:08 25 4
gpt4 key购买 nike

我正在使用 beforeunload 事件作为一种手段来代理有关我网站上的点击量的指标。例如,如果 beforeunloadclick 事件后约 50 毫秒内触发,我可以确定用户何时选择了链接。

这在 iOS 中变得复杂,因为它不支持 beforeunload。根据 Apple 文档,我已将 pagehide 替换为 beforeunload,但这没有相同的功能。看起来好像 pagehide 替换了 unload - 而不是 beforeunload。在我的测试中,它们的触发时间平均相差约 1500 毫秒(pagehide 的触发时间比 beforeunload 的触发时间晚得多)。这使得将 pagehide 事件归因于点击变得非常困难。

有没有iOS上safari支持的事件可以接近beforeunload的触发时间?

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

最佳答案

理论上 pagehide 是 safari 中 beforeunload 的替代品,但实际上不是。正确观察到触发 pagehide 事件的时间可能会有所不同,因为 safari 在后台获取新页面,当页面可用时它会触发 pagehide

如果您正在寻找一个事件,则没有事件,但是您可以尝试这个 hack,只要 click happens safari stop running requestAnimationFrame。所以你可以尝试这样的事情,当点击发生时记录 clickTs 并开始在 requestAnimationFrame 函数中记录时间戳,现在当 pageHide 触发时你只需检查clickTseventlastReqAnimTime的时间差,应该在500ms左右。这样你就可以将 click 归因于 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')
}
})

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

关于javascript - 在 iOS 上触发 beforeunload 与 pagehide 的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44655681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com