Lecture recommandée :
Comment résoudre le chargement lent de JS iFrame
Dans les projets, il est souvent nécessaire d'ajouter dynamiquement des iframes, puis d'effectuer des opérations associées sur les iframes ajoutées, mais souvent, les iframes n'ont pas encore été ajoutées. Eh bien, le code suivant a déjà été exécuté, donc certaines des choses que vous avez écrites ne sont pas affichées du tout. À ce stade, nous devons nous demander si nous pouvons attendre que l'iframe soit chargée avant d'effectuer des opérations ultérieures. Bien sûr, divers navigateurs ont déjà envisagé cela pour nous, voir ci-dessous :
c'est-à-dire le navigateur
Chaque nœud elem d'IE aura un événement onreadystatechange. Cet événement est déclenché à chaque fois que le contenu de l'élément change. Par exemple, le chargement se déclenchera lorsque le contenu est en cours de chargement, le chargement se déclenchera lorsque le contenu sera chargé et le processus complet se déclenchera lorsque le contenu sera chargé. le contenu est chargé avec succès. Trigger, cette fonction doit également coopérer avec readyState, qui est un attribut appartenant à chaque élément sur IE, et est utilisé pour vérifier l'état de chaque déclencheur.//先为iframe 添加一个 onreadystatechange iframe.attachEvent("onreadystatechange", function(){ //此事件在内容没有被载入时候也会被触发,所以我们要判断状态 //有时候会比较怪异 readyState状态会跳过 complete 所以我们loaded状态也要判断 if(iframe.readyState === "complete" || iframe.readyState == "loaded"){ //代码能执行到这里说明已经载入成功完毕了 //要清除掉事件 iframe.detachEvent( "onreadystatechange", arguments.callee); //这里是回调函数 } });
iframe.addEventListener( "load", function(){ //代码能执行到这里说明已经载入成功完毕了 this.removeEventListener( "load", arguments.call, false); //这里是回调函数 }, false);
if(iframe.attachEvent){ iframe.attachEvent("onreadystatechange", function() { //此事件在内容没有被载入时候也会被触发,所以我们要判断状态 //有时候会比较怪异 readyState状态会跳过 complete 所以我们loaded状态也要判断 if (iframe.readyState === "complete" || iframe.readyState == "loaded") { //代码能执行到这里说明已经载入成功完毕了 //要清除掉事件 iframe.detachEvent("onreadystatechange", arguments.callee); //这里是回调函数 } }); }else{ iframe.addEventListener("load", function() { //代码能执行到这里说明已经载入成功完毕了 this.removeEventListener("load", arguments.call, false); //这里是回调函数 }, false); }