我有一个外部js文件正在用document.createElement()加载(我不能修改它),我需要从它访问一个变量。问题是,我不知道它什么时候完成加载。我尝试了jQuery的文档就绪功能,但它似乎比javascript文件部署得更快。不过,我可以像这样访问变量:
setTimeout("console.log(swifttagdiv.firstChild.firstChild.src)", 5000);但这只是一个测试,看看变量是否是全局的。有什么想法吗?
发布于 2011-05-05 20:18:26
您可以使用Javascript注入脚本,而不是将其放入页面中。这样,您就可以控制何时加载它。
下面是我用来在页面中动态注入代码的函数:
function inject(src, cb, target){
target = target || document.body;
var s = document.createElement('SCRIPT');
s.charset = 'UTF-8';
if(typeof cb === 'function'){
s.onload = function(){
cb(s);
};
s.onreadystatechange = function () {
(/loaded|complete/).test(s.readyState) && cb(s);
};
}
s.src = src;
target.appendChild(s);
return s;
}要使用它:
inject('/path/to/file.js', function(script){
//your code here
})发布于 2011-05-05 20:16:00
var checkvarint = setInterval(function(){
if(swifttagdiv.firstChild.firstChild.src){
varLoaded(); clearInterval(checkvarint);
}
},10);
function varLoaded(){
alert("LOADED!");
alert(swifttagdiv.firstChild.firstChild.src);
}发布于 2011-05-05 20:38:19
Mic's answer很棒。
下面是同样的事情,只是不那么抽象,也许会有启发意义。
var scriptElement = document.createElement( 'script' );
scriptElement.type = "text/javascript";
scriptElement.src = "https://ajax.googleapis.com/ajax/libs/ext-core/3.1.0/ext-core-debug.js";
function loadHandler() {
alert( 'loaded' );
}
// for ie
scriptElement.onreadystatechange = function () {
if( this.readyState == 'complete' ){
loadHandler();
}
}
// for others
scriptElement.onload= loadHandler;
document.getElementsByTagName('head')[0].appendChild( scriptElement );https://stackoverflow.com/questions/5897414
复制相似问题