2012-10-18 76 views
1

在Facebook上開發文檔,我看到:嵌入的JavaScript片段:標記注入VS完整的標籤

<html> 
    <head> 
     <title>My Great Web page</title> 
    </head> 
    <body> 

     <div id="fb-root"></div> 
     <script> 
     // Load the SDK Asynchronously 
     (function(d){ 
      var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0]; 
      if (d.getElementById(id)) {return;} 
      js = d.createElement('script'); js.id = id; js.async = true; 
      js.src = "//connect.facebook.net/en_US/all.js#xfbml=1"; 
      ref.parentNode.insertBefore(js, ref); 
     }(document)); 
     </script> 

     <div class="fb-like"></div> 

    </body> 
</html> 

像谷歌分析,在許多其他事情,這會產生一個腳本標記,並將其插入到DOM 。

爲什麼不只是寫<script type="text/javascript" src="someUrl.com/etc"></script>開始與?

我認爲它能夠防止裝載/阻止行爲的頁面加載(又名異步)後注射。是異步的唯一原因?

+0

爲什麼不確實。你必須問Facebook。如果沒有明智的答案,不要感到驚訝。這可能是因爲他們希望瀏覽器asyncrhronously下載腳本,但瀏覽器supporrt較差。等同於將腳本元素放在頁面的底部。 – RobG

+0

這完全正確克里斯蒂安。 Chris Coyier提供了有關異步腳本加載技術的豐富綜述:http://css-tricks.com/thinking-async/ –

+0

這不是關於編程嵌入式系統。重新標記。 –

回答

2

加載腳本的這種形式把它添加到頁面異步。

屬性js.async = true;不支持舊版瀏覽器上,所以這是一個kindof黑客,使即使在舊的browers它的工作。

工作原理:它將腳本添加到dom的頭部或已加載的部分,以防止瀏覽器在繼續前下載此腳本。