我想以编程方式加载 .js 文件并在加载完成后执行一些操作。我要包含的文件托管在将包含它的域中。
具体来说,我正在加载的文件是 swfobject.js。我想检查它是否存在并仅在需要时加载它。
这是我目前所拥有的:
// BHD is defined elsewhere. For this example:
var BHD = {};
BHD.uid = function () {
return 'x'+(+(''+Math.random()).substring(2)).toString(32)+(+new Date()).toString(32);
};
BHD.include = function (file, callback) {
var uid = BHD.uid();
frame = document.createElement('iframe');
frame.src = file;
frame.id = frame.name = uid;
frame.onload = function () {
var s = document.getElementsByTagName('script')[0];
var d = frames[uid].document.documentElement;
var script = document.createElement('script');
script.type = 'text/javascript';
script.text = d.textContent||d.innerText;
s.parentNode.insertBefore(script, s);
callback();
s.parentNode.removeChild(s);
frame.parentNode.removeChild(frame);
}
document.documentElement.appendChild(frame);
}
这似乎可行。不过,这是一个丑陋的 hack。 .js 文件的内容被加载到一个 iframe 中,当 iframe 完成加载时,一个新的脚本元素被注入(inject)到带有 iframe 内容的主文档中。这似乎使脚本立即加载,因此可以在之后立即调用回调。
我想知道是否有更好的方法来做到这一点。我正在寻找脚本标签的跨浏览器“onload”事件,或其他避免 iframe 黑客攻击的方法。
最佳答案
现代版本的 IE 支持脚本元素上的 load
事件(不再支持 readystate
),因此通常的 load
事件技术将工作,不需要多个代码路径,我们不再需要忍受 bug-ridden readystate .
关于javascript - 跨浏览器 javascript 加载回调 : Is there a better way than using iframes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8631548/