在Ext2.2中 tab嵌套iframe用来页面分块,不过出现一个问题,如果iframe中页面是由js构造的话,ie上报错,ff上正确运行,经过排查,发现是js的执行顺序问题,Ext.onReady被过早的执行.
继续寻求答案,最后发现这应该是Ext的一个bug?
修改Ext源代中2个部分可以解决这个问题,当然不知道官方下个版本会不会把这个bug fix掉
修改代码如下:
var fireDocReady = function() { if (!docReadyState) { docReadyState = true; if (Ext.isGecko || Ext.isOpera) { document.removeEventListener("DOMContentLoaded", fireDocReady, false); } } if (docReadyProcId) { clearInterval(docReadyProcId); docReadyProcId = null; } if (docReadyEvent && !Ext.isReady) { Ext.isReady = true; docReadyEvent.fire(); docReadyEvent.clearListeners(); } }; var initDocReady = function() { docReadyEvent = new Ext.util.Event(); if (Ext.isReady) { return; } E.on(window, 'load', fireDocReady); if (Ext.isGecko || Ext.isOpera) { document.addEventListener('DOMContentLoaded', fireDocReady, false); } else if (Ext.isIE) { /* * docReadyProcId = setInterval(function(){ try{ Ext.isReady || * (document.documentElement.doScroll('left')); }catch(e){ return; } * fireDocReady(); }, 5); */ document.onreadystatechange = function() { if (document.readyState == 'complete') { document.onreadystatechange = null; fireDocReady(); } }; } else if (Ext.isSafari) { docReadyProcId = setInterval(function() { var rs = document.readyState; if (rs == 'complete') { fireDocReady(); } }, 10); } };