window.setTimeout() 在 Safari 中的页面导航后停止

     2023-02-23     269

关键词:

【中文标题】window.setTimeout() 在 Safari 中的页面导航后停止【英文标题】:window.setTimeout() stops after page navigation in Safari 【发布时间】:2018-11-06 17:15:08 【问题描述】:

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

最初,我在叠加层中展示了一个 CSS 加载动画,以向用户展示页面实际上在做什么。

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

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

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

【问题讨论】:

看起来 Safari 在请求开始时会卸载所有 JS,而不是在回复开始时卸载。除了在 iframe 中加载页面之外,AJAX 似乎是唯一的其他解决方法。跨度> 谢谢。由于 CSS 关键帧仍然有效,我想另一种方法是使用 CSS 动画来移动文本的位置以显示不同的消息,并更改进度条的宽度。 【参考方案1】:

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

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

所以我用 translateY 代替了“top”,用 scaleX 代替了 width。

【讨论】:

那东西是黄金 - transform 仍然有效 - 我需要这个来获得一些“加载下一页”反馈 - 终于解决了 IOS

修改window.settimeout,使之可以传递参数和对象参数

/* 功能:修改window.setTimeout,使之可以传递参数和对象参数 使用方法:setTimeout(回调函数,时间,参数1,,参数n) */ var_setTimeout=setTimeout;window.setTimeout=function(callback,time,params){varparam=Array.prototype.sli 查看详情

settimeout传参数(转)

无论是window.setTimeout还是window.setInterval,在使用函数名作为调用句柄时都不能带参数。带参数则立马执行,没有延时效果。可通过下面方式实现。 <script language="javascript">      function show(name)&n... 查看详情

js定时器window.settimeout和setinterval

window.setTimeout(function(){                            doc 查看详情

如何在 Dart 中执行相当于 setTimeout + clearTimeout 的操作?

】如何在Dart中执行相当于setTimeout+clearTimeout的操作?【英文标题】:HowdoIdotheequivalentofsetTimeout+clearTimeoutinDart?【发布时间】:2015-01-1917:08:19【问题描述】:我正在将一些JavaScript移植到Dart。我的代码使用window.setTimeout在一段时间后... 查看详情

重写settimeout扩展参数

1//判断函数行参长度来决定是否需要重写setTimeout,ie8以下为undefined2if(window.setTimeout.length==undefined){3var__sto=window.setTimeout;4window.setTimeout=function(callback,timeout,param){5varargs=Array.prototype.slice.ca 查看详情

window.settimeout和window.setinterval的区别,及用其中一个方法记录时间。

window.setTimeout(语句,时间)是在多久之后执行语句,语句只执行一次。window.setInterval(语句,时间)是每隔多久执行一次语句,语句循环执行。1<!DOCTYPEhtml>2<html>3<head>4<metacharset="UTF-8">5<title></title>6</... 查看详情

14-定时器(代码片段)

在js中的定时器分两种:1、setTimeout()2、setInterval() 1.setTimeOut()只在指定时间后执行一次/定时器异步运行functionhello()alert("hello");//使用方法名字执行方法vart1=window.setTimeout(hello,1000);vart2=window.setTimeout("hello()",3000); 查看详情

14-定时器(代码片段)

在js中的定时器分两种:1、setTimeout()2、setInterval() 1.setTimeOut()只在指定时间后执行一次/定时器异步运行functionhello()alert("hello");//使用方法名字执行方法vart1=window.setTimeout(hello,1000);vart2=window.setTimeout("hello()",3000); 查看详情

14-定时器(代码片段)

在js中的定时器分两种:1、setTimeout()2、setInterval() 1.setTimeOut()只在指定时间后执行一次/定时器异步运行functionhello()alert("hello");//使用方法名字执行方法vart1=window.setTimeout(hello,1000);vart2=window.setTimeout("hello()",3000); 查看详情

14-定时器(代码片段)

在js中的定时器分两种:1、setTimeout()2、setInterval() 1.setTimeOut()只在指定时间后执行一次/定时器异步运行functionhello()alert("hello");//使用方法名字执行方法vart1=window.setTimeout(hello,1000);vart2=window.setTimeout("hello()",3000); 查看详情

js中两种定时器,settimeout和setinterval的区别(代码片段)

setTimeout只在指定时间后执行一次,代码如下:<script>//定时器异步运行functionhello()alert("hello");//使用方法名字执行方法vart1=window.setTimeout(hello,1000);vart2=window.setTimeout("hello()",3000);//使用字符串执行方法window.clearTimeout 查看详情

5.定时器(代码片段)

setTimeout()setInterval()定时器在js中有两种定时器:一次性定时器:setTimeout()周期性循环定时器:setInterval()setTimeout()只在指定的时间后执行一次/定时器异步运行functionhello()alert("hello");//使用方法名字执行方法vart1=window.setTimeout(hello,1000... 查看详情

settimeout和setinterval

设置定时器,在一段时间之后执行指定的代码,setTimeout与setInterval的区别在于setTimeout函数指定的代码仅执行一次方法一:window.setTimeout("alert(‘ok‘)",5000);方法二:window.setTimeout(function(){  alert("Ok");},5000);方法三:functionshowA... 查看详情

14-定时器(代码片段)

【转】14-定时器在js中的定时器分两种:1、setTimeout()2、setInterval() 1.setTimeOut()只在指定时间后执行一次/定时器异步运行functionhello()alert("hello");//使用方法名字执行方法vart1=window.setTimeout(hello,1000);vart2=window.setTimeout("hello()",3000);/... 查看详情

JavaScript 类中的 setTimeout() 使用“this”

】JavaScript类中的setTimeout()使用“this”【英文标题】:setTimeout()insideJavaScriptClassusing"this"【发布时间】:2011-08-2003:39:44【问题描述】:我正在尝试在JavaScript的类函数中使用setTimeout()。setTimeout()应该触发同一个类中的另一个... 查看详情

在 Android 中从 File Api 迁移到 Storage Access Framework (SAF)

】在Android中从FileApi迁移到StorageAccessFramework(SAF)【英文标题】:MigrationfromFileApitoStorageAccessFramework(SAF)inAndroid【发布时间】:2021-07-1923:49:07【问题描述】:由于Android11和范围存储,我必须开始使用存储访问框架(SAF),但我有很多源... 查看详情

清除定时器和vue中遇到的定时器settimeout问题

--------------VUE项目中遇到一个问题。a.vue文件中触发setTimeout后,使用按钮跳转至其他页面,快速返回至a.vue页面后发现定时器仍然在走。例子:a.vue代码window.setTimeout(function(){ window.location.href="/serverMonitor?t="+newDate().getTime();},5000... 查看详情

js定时器_settimeout

1、window.setTimeout(A,B);window.clearTimeout(?); 2、1<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">23<html>45<sty 查看详情