FBAsyncInit自动脚本加载

时间:2012-06-08 12:27:34

标签: authentication facebook-javascript-sdk

在某些文档中,FbAsyncInit以:

结尾
(function() { 
    var e = document.createElement('script'); 
    e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js'; 
    e.async = true; 
    document.getElementById('fb-root').appendChild(e); 
 }()); 

而在其他一些文档中,它的结尾如下:

  (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";
        ref.parentNode.insertBefore(js, ref);
  } (document));

哪一个是正确使用的?或者它们可以互换吗?

我注意到有时文档会要求你添加html标题:

xmlns:fb="http://ogp.me/ns/fb#"

以及其他地方他们称之为:

xmlns:fb="http://www.facebook.com/2008/fbml"

其中一个是正确的?
哪一个更快?

文档的不同页面似乎是由不同的团队编写的......

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

  

哪一个是正确使用的?或者它们可以互换吗?

它们是可以互换的;只是两种略有不同的方法做了基本相同的事情。我更喜欢第二个版本 - 它的主要优点是它在脚本元素上设置了一个id,因此如果该函数碰巧在同一页面中放置两次,则不会加载它两次。

  

其中一个是正确的?

两者都是。 XFBML在旧IE中工作所必需的HTML元素上的命名空间 - 它实际上“指向”并不重要。

  

哪一个更快?

它们对“速度”没有任何影响,因为给定的URL只是命名空间的标识符,它实际上并不是由浏览器提取的。如果你愿意的话,你也可以把http:// example.com/my-own-fancy-namespace放在那里......