一些 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/