Javascript Firefox在元素已加载后执行onload
我有一个iframe(我知道是坏的),在document ready上设置了加载事件:Javascript Firefox在元素已加载后执行onload,javascript,firefox,Javascript,Firefox,我有一个iframe(我知道是坏的),在document ready上设置了加载事件: <script> $(function(){ var executeLoad = false; $("#ExampleFrame").on("load", function(){ if(executeLoad){ doSomething(); } }); executeLoad = true; }); <
<script>
$(function(){
var executeLoad = false;
$("#ExampleFrame").on("load", function(){
if(executeLoad){
doSomething();
}
});
executeLoad = true;
});
</script>
<iframe id="ExampleFrame" name="example"></iframe>
<form id="Example Form" method="post" action="http://externalurl" target="example">
</form>
$(函数(){
var executeLoad=false;
$(“#ExampleFrame”)。在(“加载”,函数()上{
if(executeLoad){
doSomething();
}
});
executeLoad=true;
});
我注意到,doSomething()
在页面加载后立即被执行,因此我添加了executeLoad
检查,该检查仍然不起作用。我还尝试将脚本块放入表单
标记下方的主体中,它仍在执行中。这只发生在Firefox中。是否有任何方法可以忽略#ExampleFrame
的初始加载事件?我本以为将加载事件绑定到document ready上可以防止这种情况发生。网页加载(和onload事件被触发),即使异步调用、承诺、图像加载、iframe加载等其他元素仍在进行中。这意味着,即使某些Div和元素尚未加载,也会加载HTML文档
因此,基本上,如果您希望整个网页&iframe完全加载,请使用以下内容-
<script>
$(function(){
$("#ExampleFrame").one("load", function(){
$(this).on("load", doSomething);
});
});
</script>
<iframe id="ExampleFrame" name="example"></iframe>
<form id="Example Form" method="post" action="http://externalurl" target="example">
</form>
$(函数(){
$(“#ExampleFrame”).1(“加载”,函数(){
$(此)。在(“加载”,剂量测量);
});
});
希望有帮助。准备好的文档不能保证像iframe这样的外部资源被完全加载,它只是一个处理程序,当所有元素都存在时,
标记已经输出等。图像、帧、脚本和其他东西仍然可以加载。如果要忽略第一个iframe加载事件,您可能可以执行以下操作->您可以检查加载处理程序中的this.contentWindow.location
,并根据该数据确定要执行的操作。Firefox一开始会触发“about:blank”的加载处理程序,因为iframe确实加载到了您的页面上,尽管内容是空白的。@adeneo这实际上阻止了初始执行吗?jQuery文档建议它将执行“加载”触发器的第一个实例,然后再也不会触发。现在您有了一个事件处理程序,它可以在每次加载iFrame时创建一个新的事件处理程序,创建许多事件处理程序并发出。@adeneo Yes。同意。但是,对于他的问题,我觉得这是一个可行的解决方案。如果有一种方法可以让iframe稍后加载来解决问题,那么就不要更改流。正如adeneo所说,页面会让加载速度变慢。到处都是事件处理程序!那会把事情搞砸的。第一个调用应该是.one
,而不是。on
是。在csum进行了更改