我编写了一个 CSS 和 Javascript 惰性加载器来为单独的 pagelet 动态加载资源(就像 Facebook 使用 BigPipe 技术呈现页面的方式一样)。
简而言之,首先呈现 HTML 框架,然后页面的各个部分都由服务器异步生成。当每个 pagelet 到达时,首先加载 pagelet css,然后设置其 innerHTML,最后我们为此 pagelet 加载任何所需的 javascript 并对其进行初始化。
一切都完美无缺,任何给定页面的感知加载时间几乎都是瞬时的。
但是在 IE 中,我偶尔会Method does not support method or property
在初始化脚本时得到。
我通过在加载脚本之前检查 document.readyState 解决了这个问题。
现在这不是一个大问题,但它平均为 chrome 或 firefox 中的页面加载增加了 170 毫秒。这是不需要的。
function loadScripts(init){
// ensure document readystate is complete before loading scripts
if( doc.readyState !== 'complete'){
setTimeout(function(){
loadScripts(init);
}, 1 );
}
else{
complete++;
if(complete == instance.length){
var scripts = checkJS(javascript);
if(scripts.length) {
LazyLoad.js(scripts, function(){
runPageletScript();
for (var i = 0; i < scripts.length; ++i) {
TC.loadedJS.push(scripts[i]);
}
});
}
else{
runPageletScript();
}
}
}
}
我正在寻找的是对这个脚本的修改,它只会在 IE 中实现“等待”,如果它是任何其他浏览器,它会立即触发。我不能使用像 jQuery 一样的实用程序,$.Browser
并且需要它成为最小的可能方法。我讨厌使用任何形式的浏览器检测,但它似乎是我唯一的解决方案。也就是说,如果有人能想出另一种方法,那就太棒了。
任何建议将不胜感激。