iframe 加载事件中的 setTimeout 似乎没有像预期的那样等待 x 秒
setTimeout inside iframe load event doesn't seem to wait x seconds as expected
我想在加载 iframe 后几秒钟后触发 doSomething(),但它会立即触发 doSomething,为什么?
<html>
<iframe id="myIframe" src="myFrame.html" width=100% height=600></iframe>
<script>
iframe = document.getElementById("myIframe");
function doSomething() {
alert("it should have wait 5000 milliseconds, instead it triggers immediately");
}
if (navigator.userAgent.indexOf("MSIE") > -1 && !window.opera) {
var oldonreadystatechange = iframe.onreadystatechange;
iframe.onreadystatechange = function(){
if (iframe.readyState == "complete"){
if (oldonreadystatechange != null) {
oldonreadystatechange();
setTimeout(doSomething(),5000);
}
}
};
} else {
var oldonload = iframe.onload;
iframe.onload = function(){
if (oldonload != null) {
oldonload();
}
setTimeout(doSomething(),5000);
};
}
</script>
</html>
如果你还想传递参数,一个非常简单的方法是为 setTimeout 创建一个新的匿名函数,如下所示:
setTimeout(function(){ doSomething(123, anotherParam) }, 5000);
这是因为在 JavaScript 中,如果你将函数作为参数传递给另一个函数,比如 someFunction(otherFunction());你正在将该函数的执行结果传递给 someFunction。
您要做的是将该函数的引用提供给 setTimeout,以便 setTimeout 决定何时运行它。
这样做:
setTimeout(doSomething, 5000);
除非我完全错过了什么,否则如果您只是在 iframe 的加载事件上触发,您可以使用以下内容来减少该代码:
document.getElementById('myIframe').onload = function() {
setTimeout(doSomething, 5000);
}
片段
<iframe id="myIframe" src="/" width=100% height=600></iframe>
<script>
iframe = document.getElementById("myIframe");
function doSomething() {
alert("it should have wait 5000 milliseconds, instead it triggers immediately");
}
iframe.onload = function() {
setTimeout(doSomething, 5000);
}
</script>
相关文章:
- Chrome 扩展程序会等待设置加载到事件处理程序中
- iFrame.load事件未等待预加载图像完成
- 如何等待单击事件完成
- 如何创建一个等待来自另一个模板的onRendered事件的方法
- 使用Angular Directive用$scope属性更新DOM-只要指令运行(无需等待事件)
- 正在等待服务器上发生事件
- HTML5视频-等待事件未启动
- 如何等待 Node.js 中的下一个事件
- JavaScript:从javascript加载图像,然后等待该图像的“load”事件
- iframe 加载事件中的 setTimeout 似乎没有像预期的那样等待 x 秒
- nodeJS 等待无法承诺的事件
- 模拟单击选项并等待更改事件完成
- 在单击事件时更新主干模型,并在更改位置之前等待响应
- 我怎么能等待在javascript中执行事件
- 无需等待事件即可填写和提交表格
- 我应该在等待事件启动时明确创建一个承诺吗
- 是否可以在等待事件侦听器时停止函数的执行
- 等待事件被处理以继续执行触发该事件的函数
- 需要函数等待事件处理程序完成后再执行下一个函数
- 如何在dojo中创建等待事件,等待用户在继续之前单击按钮