javascript - 为什么通过 Javascript 创建脚本标签,而不是使用 defer 或 async 脚本标签属性?

标签 javascript html asynchronous disqus livefyre

一些 Web 应用程序(我正在考虑 Disqus 和 LiveFyre)创建 <script>通过 Javascript 标记,并通过 Javascript 指定异步加载新脚本。为什么他们通过 Javascript 创建标签?而不是简单地做:

<script src="..." async>

一个例子:

这是 Disqus 指示网站所有者加载评论的方式:

<script type="text/javascript">
    var disqus_shortname = ...
    (function() {
        var s = document.createElement('script');
        s.type = 'text/javascript';
        s.async = true;
        s.src = '//' + disqus_shortname + '.disqus.com/embed.js';
        (document.getElementsByTagName('head')[0] ||
           document.getElementsByTagName('body')[0]).appendChild(dsq);
    })();
</script>

还有 src = ...disqus.com/embed.js地址只是重定向到另一个 Disqus 服务器上的静态脚本,显然独立于 disqus_shortname

为什么不告诉人们使用这段代码:

<script>
    var disqus_shortname = ...
</script>
<script src="http://direct-address-to-the-embed.js-script" async>

或者更简单,只有一行:

<script src="http://the_disqus_shortname.disqus.com/embed.js" async>

?

(附:我在下面添加了一个答案。请添加其他答案:-))

最佳答案

我的猜测是 Disqus(和其他服务)希望确保他们的脚本不会减慢用户站点的加载无论何时您放置他们的脚本(可能许多 CMS 将脚本放在 head 元素中).

如果您总是将脚本放在 body 元素的末尾,那么编写简短版本可能是最佳选择:

    ...
    <script>var disqus_shortname = ...</script>
    <script src="//shortname.disqus.com/embed.js" async>
</body>

不过我不确定!

关于javascript - 为什么通过 Javascript 创建脚本标签,而不是使用 defer 或 async 脚本标签属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20728939/

相关文章:

javascript - 具有身份验证功能的 Firebase 快照监听器

php - 根据javascript值更改php变量

html - CSS - 在不使用其样式的情况下在另一个样式列表中添加列表

html - 主菜单不显示在手机上(纵向)

c# - 如何 - 具有超时和取消的多个异步任务

javascript - Bootstrap 3 性能 - 每个屏幕卡住 5-30 秒

javascript - 如何将 React 应用程序的生产 npm 版本部署到 Azure 应用服务

html - css 3d旋转和放大对象

ios - XC测试 : Can expectationForPredicate fulfill on async variable change?

c# - 使用 Dapper QueryAsync 返回单个对象