4

Both the Tweet Button and Facebook Like widgets tell you to add something like this to your HTML:

<script>
!function(d,s,id){
    var js,fjs=d.getElementsByTagName(s)[0];
    if(!d.getElementById(id)){
        js=d.createElement(s);
        js.id=id;
        js.src="https://platform.twitter.com/widgets.js";
        fjs.parentNode.insertBefore(js,fjs);
    }
}(document,"script","twitter-wjs");
</script>

which dynamically adds a <script> element to the DOM which then loads the actual widget JavaScript. Why is this done dynamically instead of directly loading the widget like this (which is simpler and cleaner):

<script src="https://platform.twitter.com/widgets.js"></script>

The only reason I can think of is that it defers the script load until the page has loaded, but this can just as easily be accomplished by placing the <script> just before the </body> close.

4

2 回答 2

1

因为无法保证实现此代码的人员有足够的能力将脚本放置在正确的位置。此外,理想情况下,该脚本应该足够通用,任何使用任何系统的人都可以轻松实现它。

一些 CMS 不允许对脚本添加到页面的位置进行细粒度控制。提供更多人可以使用而不会造成混淆的代码符合社交网络的最大利益。

于 2013-02-07T03:20:14.350 回答
0

当您添加这样的脚本时,它会异步加载,并且不会阻止 HTML 的其余部分加载。如果它只是<script>添加到 的标签<head>,则在脚本完成加载之前不会解析 HTML 的其余部分,这可能会影响用户体验。但是,如果您在<script>之前添加块,您将获得几乎相同的异步加载结果</body>

(我猜这就是 zzzzBov 所说的“正确的地方”。)

于 2013-02-07T03:25:00.947 回答