Internet Explorer尝试在加载库之前运行jQuery

unj*_*nj2 3 javascript jquery internet-explorer dom

我有一个小脚本

document.write("<html><head><script src='/js/jquery-1.4.2.min.js' type='text/javascript'></scr"
         + "ipt><script>alert($"+"().jquery);</scri" + "pt></head></html>");
Run Code Online (Sandbox Code Playgroud)

但我$ is undefined在Internet Explorer中获得了一个.我认为它会在加载库之前尝试运行脚本.

然而,这在Firefox中运行.请帮忙.

编辑:我打开一个新窗口并写入该窗口的文档.

gon*_*uki 8

<script>以正确的方式创建标签有什么问题?document.write是邪恶的,讨论的结束.

试试这个:

var load_script = function(options) {
  options.owner_document = options.owner_document || document;

  var script_tag = options.owner_document.createElement('script');
  script_tag.setAttribute('type', 'text/javascript');
  script_tag.setAttribute('src', options.src);
  script_tag.onload = function() {
    script_tag.onreadystatechange = null;
    options.callback && options.callback();
  };
  script_tag.onreadystatechange = function() {
    if (script_tag.readyState == 'loaded' || script_tag.readyState == 'complete') {
      script_tag.onload = null;
      options.callback && options.callback();
    }
  };
  options.owner_document.getElementsByTagName('head')[0].appendChild(script_tag);
};
Run Code Online (Sandbox Code Playgroud)

如你所见,该片段上有一个简单的API:
src - 脚本
owner_document的源代码- 将插入脚本的文档,默认为脚本从
回调运行的当前文档- 在脚本加载后运行的函数,任何需要src脚本的东西都可以在这个闭包中运行.

示例用法:

// sample loading of jQuery
load_script({
  src: '/js/jquery-1.4.2.min.js',
  callback: function() {
    // jQuery is available at this point, run your code.

  }
});
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用requiere.jsLABjs之类的加载