在我的页面上,我需要使用src=some_external_path
元素制作动态脚本。
该脚本元素在其内部卸载了一些JS,并且需要执行JS实习生以便提取一些图像内容。
我的问题是它需要一些时间来完成该脚本元素中的JS执行,它是如何实现的?
如果我在脚本末尾插入警报或运行一些尴尬的for
循环,那么它很有用,不幸的是它不适用于setTimeOut
函数。
以下是示例代码:
var s = document.createElement('script');
s.setAttribute("src", "some_external_path");
document.getElementById('test').appendChild(s);
// if i replace that alert - doesn't work, it seems page needs some delay
alert(document.getElementById('test').text);
我也尝试过这样的事情:
setTimeout(function(scriptElement){
document.getElementById('test').appendChild(scriptElement);
}, 5000, s);
它也不起作用,我也想过在该脚本元素中执行代码,但由于安全限制(script.text或script.innerHTML返回空字符串),它似乎不起作用;
你能否提出任何建议,使这个代码完整交易没有循环,希望自制延迟?
答案 0 :(得分:0)
http://api.jquery.com/jQuery.getScript/
如果您不想使用jQuery,只需查看它是如何完成的,并从中获得灵感。
答案 1 :(得分:0)
这应该这样做(当你不需要时不使用jQuery):
var loadScript = function(url, cb){
var s = document.createElement("script"), done = false;
s.setAttribute("src", url);
s.onreadystatechange = s.onload = function(){
if (!done && (!this.readyState || this.readyState == "loaded" || this.readyState == "complete")) {
done = true;
cb();
}
};
document.getElementsByTagName("head")[0].appendChild(s);
}
你这样称呼它:
loadScript("http://path.to.my/script.js", function(){
alert("YAY its loaded");
});
我希望有所帮助。