动态脚本生成和输出问题

时间:2011-12-02 13:46:35

标签: javascript

在我的页面上,我需要使用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返回空字符串),它似乎不起作用;

你能否提出任何建议,使这个代码完整交易没有循环,希望自制延迟?

2 个答案:

答案 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");
});

我希望有所帮助。