var script = document.createElement("script");
script.setAttribute("src", "script.js");
script.setAttribute("async", "false");
document.body.appendChild(script);
现在我用这种方式引入js脚本,但依然是异步的,如何使它同步?
var script = document.createElement("script");
script.setAttribute("src", "script.js");
script.setAttribute("async", "false");
document.body.appendChild(script);
现在我用这种方式引入js脚本,但依然是异步的,如何使它同步?
要同步引入外部js文件是可行的
<script>
document.write('<scr'+'ipt type="text/javascript" src="jquery.js"></sc'+'ript>');
</script>
<script>
//必须在另一个标签里才能调用引入的jQuery
$...
</script>
但是有很多限制:
document.write只能在文档加载完成前用
document.write所引入的代码并不会在document.write之后立即执行,而是在它所在的script标签执行完成后才执行。
字符串里的script
必须拆开成如scr'+'ipt
形式,以免被浏览器视为关闭标签。
用ajax可以实现。
比如jquery的
jQuery.getScript( url [, success(script, textStatus, jqXHR) ] )
或者直接自己用ajax写。
$.ajax({
url: url,
async:false,
dataType: "script",
success: function(){
//ok
}
});
第一种方法:纯js同步加载先后加载jqurery.js和demo.js。
var jqr = document.createElement('script');
jqr.type = 'text/javascript';
jqr.async = false; // 异步加载 true
jqr.src = '/js/jquery.js';
jqr.onload = function() {
var demo= document.createElement('script');
demo.type = 'text/javascript';
demo.async = false; // 异步加载 true, onload方法中的内容放到外面同级执行
demo.src = '/js/demo.js';
var ss = document.getElementsByTagName('script')[0];
ss.parentNode.insertBefore(sdk, ss);
};
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(jqr, s);
第二种方法:html中引入script标签同步加载jqurery.js和demo.js。
<script type="text/javascript" src="/js/jquery.js"></script> // 异步加载加 async 属性
<script type="text/javascript" src="/js/demo.js"></script> // 异步加载加 async 属性
8 回答4.9k 阅读✓ 已解决
6 回答3.7k 阅读✓ 已解决
5 回答3k 阅读✓ 已解决
5 回答6.5k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
async 属性看链接:链接描述