假设我在不同服务器中有my-file.js
或某个CDN文件
for (var i = 0; i < 1000; i ++) {
//something really long and hard to execute
}
//after this long execution
window.myObj = {
//initialization of some global object that I need
}
(我无法更改my-file.js
...)
我想将my-file.js
异步添加到页面,然后在加载后 和 EXECUTED < / strong>我想打电话给某些事件:
//when my my-file.js is loaded I finally use window.myObj
window.myObj.somefunc(); //yaaay
有可能吗? (IE9 +的跨浏览器对我来说很重要,但任何不重要的)
注意: 如果我需要的文件是CDN或不同服务器上的某个地方 - 我需要记住跨域策略,所以我认为在这种情况下加载ajax中的文件内容是不可能的。
注2: http://www.chromestatus.com/features/5711871906676736我确实需要什么,但我敢打赌,你可以在几年前轻松地在全球范围内使用它。
答案 0 :(得分:2)
var script = document.createElement('script');
script.onload = function(){
// loaded
}
document.head.appendChild(script);
script.src = "path/to/script";
关于最简单的例子。是的,整个事情都是异步的,因此它需要onload
处理程序。
你也可以将它包装在一个函数中:
function getScript(src,callback){
var script = document.createElement('script');
script.onload = callback;
document.head.appendChild(script);
script.src = src;
}
getScript('path/to/js',function(){
//loaded
});
但是,开箱即用,听起来像是需要依赖管理。使用RequireJS。应该符合您的需求。
答案 1 :(得分:0)
jQuery getScript有一个可用于在加载文件后执行事件的回调,或者你可以像Joseph的例子一样使用script.onload:
http://api.jquery.com/jquery.getscript/
如果你想等到某个属性可用(即一些工作完成后),你可以创建一个间隔,然后在窗口中找到属性后立即清除它,即:
var waitForObj = setInterval(function(){
if(window.myObj && window.myObj.somefunc){
clearInterval(waitForObj);
//Do some stuff you need this object for
}
}, 100);