javascript - pagehide 和 pageshow 事件在 ios chrome 上无法正常工作

标签 javascript ios google-chrome dom-events

Apple 文档在此处列出了可用的 iOS 浏览器事件: https://developer.apple.com/library/archive/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html

“pagehide”和“pageshow”事件似乎在 safari 上运行良好,但在 chrome 上它仅适用于页面加载和卸载。它不适用于:

  1. 按下主页按钮,即将 Chrome 转到后台

  2. 切换标签页

下面是一个小的 Javascript 片段,您可以使用它来验证它:

<script type="text/javascript">
        window.addEventListener("pageshow", function(evt){
            alert('show');
        }, false);
        window.addEventListener("pagehide", function(evt){
            alert('hide');
        }, false);
</script>

我该怎么做才能检测 chrome 是否已发送到后台。我需要在 chrome 回到前台后立即清除 setTimeout 计时器。有什么解决方法吗?

最佳答案

下面是工作代码:

<script type="text/javascript">
        var heartbeat;
        var lastInterval;

        function clearTimers() {
            clearTimeout(heartbeat);
        }

        function getTime() {
            return (new Date()).getTime();
        }

        function intervalHeartbeat() {
            var now = getTime();
            var diff = now - lastInterval - 200;
            lastInterval = now;
            if(diff > 1000) { // don't trigger on small stutters less than 1000ms
                clearTimers();
            }
        }
        lastInterval = getTime();
        heartbeat = setInterval(intervalHeartbeat, 200);

您可以在此处找到更多详细信息:http://aawaara.com/post/74543339755/smallest-piece-of-code-thats-going-to-change-the-world

关于javascript - pagehide 和 pageshow 事件在 ios chrome 上无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21311478/

相关文章:

Javascript自动表单提交

ios - XLIFF 文件、键和带有 NSLocalizedString 的长字符串

ios - 让玩家双跳 Sprite Kit Swift

dom - Google Chrome 扩展程序 - 访问 DOM

javascript - 上传图片到本地存储

javascript - 替代已弃用的 onExceededDatabaseQuota()

javascript - Dojo Dialog.show() 不工作

将年分解为小时天分钟秒的 Javascript 计算器

iphone - 在 UIImageView 中同步后台作业

Java getLocalAddr() 返回 IPV6 地址