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中运行.请帮忙.
编辑:我打开一个新窗口并写入该窗口的文档.
<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.js和LABjs之类的加载器