javascript - 动态载入js脚本的同步/异步问题
高洛峰
高洛峰 2017-04-11 13:27:08
[JavaScript讨论组]
var script = document.createElement("script");
script.setAttribute("src", "script.js");
script.setAttribute("async", "false");
document.body.appendChild(script);

现在我用这种方式引入js脚本,但依然是异步的,如何使它同步?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(6)
PHP中文网

同步的话请使用 <script>标签,这个会阻塞浏览器

大家讲道理

用ajax可以实现。
比如jquery的

jQuery.getScript( url [, success(script, textStatus, jqXHR) ] )

或者直接自己用ajax写。

$.ajax({
  url: url,
  async:false,
  dataType: "script",
  success: function(){
     //ok
  }
});
迷茫

这本来就是异步加载的方式吧

同步:

<script src="a.js"></script>
ringa_lee
<head>
  <script>
    var src = 'js/test.js';
    var s = document.createElement('script');
    s.src = src;
    document.head.appendChild(s);
  </script>
</head>

async 属性看链接:链接描述

黄舟

appendChild的方法引入script都是异步的。
同步的话只能单独引入,或者把同步的javascript合并。

PHP中文网

要同步引入外部js文件是可行的

<script>
    document.write('<scr'+'ipt type="text/javascript" src="jquery.js"></sc'+'ript>');
</script>
<script>
    //必须在另一个标签里才能调用引入的jQuery
    $...
</script>

但是有很多限制:

  1. document.write只能在文档加载完成前用

  2. document.write所引入的代码并不会在document.write之后立即执行,而是在它所在的script标签执行完成后才执行。

  3. 字符串里的script必须拆开成如scr'+'ipt形式,以免被浏览器视为关闭标签。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号