javascript - window.setTimeout() 在 Safari 中进行页面导航后停止

标签 javascript ios macos safari frontend

我有一个页面需要 8-10 秒才能加载,因为服务器对外部服务进行 API 调用,该服务会处理一些大数字。提交表单后调用此函数。

最初,我在叠加层中显示了 CSS 加载动画,以向用户展示页面实际上正在执行某些操作。

然后,我通过使用 window.setTimeout() 每 2 秒调用一些代码来增强这一点,更新进度条并显示一条消息说明系统正在做什么。当然这是假的,但是当 10 秒内有 4-5 条消息需要阅读时,它会让时间显得短得多。

我的问题是超时在 Safari 中不起作用(在 MacOS 或 iOS 上)。它适用于所有其他浏览器,包括 Mac 上的 Chrome。一旦提交表单,所有计时器似乎都停止了(它也会影响横幅中的幻灯片)

有人遇到过这种情况,并且知道解决方法吗?我真的不想用 AJAX 提交来替换标准表单提交,因为这会涉及大量的重组,而我们没有预算。

最佳答案

我知道这是一个非常具体的用例,但我最终使用 CSS 动画(带有关键帧)而不是 setTimeout() 来允许动画在导航开始后运行。

我偶然发现这样一个事实:一旦页面请求开始,Safari 中的大多数动画属性似乎都不起作用,但任何“转换”属性都可以。也许这是 Safari 的一个错误,我不确定。

因此,我使用的不是“top”,而是使用了translateY,并且我使用的是scaleX,而不是宽度。

关于javascript - window.setTimeout() 在 Safari 中进行页面导航后停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53176807/

相关文章:

ios - Swift 3 - 未调用完成处理程序

ios - swift : Where can I find a list of all the forkey arguments available for Alert actions

cocoa - 不使用页面设置进行打印 - 对纸张尺寸和方向的变化有何 react ?

javascript - 隐藏和显示两个模式,滚动不起作用

javascript - 保持左列可见且可滚动

javascript - 虚拟表自动高度的三元运算符

c++ - 如何从终端启动 C 应用程序,并将参数传递给 int main(int argc, char *argv[])?

javascript - TypeError : moment(). tz 不是函数

具有自动布局的 iOS UIScrollView 未正确居中

python - 在 OSX 上调用 python 和 Spyder 的方法