【问题标题】:iPhone / iPod Touch mailto link destroys javascript timersiPhone / iPod Touch mailto 链接破坏了 javascript 计时器
【发布时间】:2011-02-20 13:14:15
【问题描述】:

在 iPhone 或 iPod Touch 上的移动 Safari 中,如果用户单击 mailto 链接然后返回到页面(发送或取消),则计时器不再在 javascript 中起作用。我已经在苹果和 openradar 上发布了一个错误。

但是,我想知道是否有人以前遇到过这种情况并想出某种解决方法。

更新:这里是一些示例代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Testing</title>
    </head>
    <body>
        <h1 id="normal">Normal: 0</h1>
        <h1 id="timed">Timed: 0</h1>
        <h1 id="interval">Interval: 0</h1>
        <a id="clicker">Click Me</a><br />
        <a href="mailto:">Mail To</a>

        <script type="text/javascript">
            window.addEventListener('load', function ()
            {

                var count = 0;
                var interval = 0;
                var id;

                document.getElementById('clicker').addEventListener('click', function () {
                    interval = 0;
                    count++;
                    document.getElementById('normal').innerHTML = 'Normal: ' + count;
                    setTimeout(function () {document.getElementById('timed').innerHTML = 'Timed: ' + count; }, 100);
                    id = setInterval(function ()
                    {
                        interval++;
                        if(interval > 5)
                        {
                            clearInterval(id);
                            return;
                        }

                        document.getElementById('interval').innerHTML = 'Interval: ' + interval;
                    }, 200);
                }, false);

            }, false);
        </script>
    </body>
</html>

为了澄清一些明显的混淆,我所说的是一个错误,并不是说当您离开页面并返回任何已停止运行的计时器时,这是可以预料的。问题是一旦用户返回该页面,如果您启动新计时器,它们将永远不会触发。

【问题讨论】:

    标签: javascript iphone mobile-safari mailto


    【解决方案1】:

    这不是错误,因为当邮件应用程序启动时浏览器窗口实际上是关闭的。当用户返回时,它会恢复,但任何正在运行的脚本都将停止。

    虽然不是很好,但在意料之中。

    【讨论】:

    • 我并不是说正在运行的计时器停止运行,我完全理解这一点。我的意思是,一旦您单击 mailto 链接,然后返回该页面。我不能再设置计时器了。看看示例代码,如果你在 iPod touch 或 iPhone 上运行它,你点击 mailto 链接然后返回,无论你点击多少次“Click Me”链接,计时器永远不会被重置。
    • 对,但是在从 Safari 应用程序中删除和返回触摸按钮之间是否有页面重新加载?如果没有,它将无法正常工作。 Safari 缓存页面并停止所有页面进程。您没有看到实时页面。您将看到页面的最后缓存渲染的图像。这就是为什么离开应用程序太久会清除此渲染并强制重新加载的原因。重新启动的唯一方法是重新加载页面。您可能会找到一种方法来强制这种行为。一旦你得到它,只需设置一个 cookie 并让它从它离开的地方开始。
    • 顺便说一句,我最近写的一个 JS 插件也有同样的问题。这非常令人恼火,但我能想到的唯一解决方法是触发 window.location
    • 以上代码显示js还在运行。当您单击链接返回页面时,“正常:”值仍会增加。所以部分 javascript 仍然可以正常工作。但是计时器不是。
    • 另外值得注意的是,如果您重新加载页面,即 window.location.reload();计时器无法正常工作的问题仍然存在。即使您将用户重定向到另一个页面并从该页面立即将用户重定向回来(我知道的修复尝试的骇人听闻的尝试......)仍然不起作用。该页面仍处于错误状态。我发现唯一可以让移动 Safari 恢复的方法是单击 url 栏,然后单击 go。
    猜你喜欢
    • 2014-09-09
    • 1970-01-01
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-17
    • 1970-01-01
    • 2015-12-25
    相关资源
    最近更新 更多