我想以编程方式加载.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);
}
这似乎有效。不过,这是一个丑陋的黑客行为。 .js文件的内容加载到iframe中,当iframe完成加载时,新的脚本元素将使用iframe的内容注入主文档。这似乎使脚本立即加载,因此可以在之后立即调用回调。
我想知道是否有更好的方法来做到这一点。我正在为脚本标签的跨浏览器'onload'事件寻找一些东西,或者其他一些方法来避免iframe hack。
答案 0 :(得分:0)
IE的现代版本支持脚本元素上的load
事件(并且不再支持readystate
),因此通常的load
事件技术将起作用,不需要多个代码路径,我们不再需要忍受bug-ridden readystate。