加载JS SDK的不同方式

时间:2012-02-15 15:38:54

标签: facebook gwt facebook-javascript-sdk facebook-social-plugins

FB的文档建议加载SDK的“官方”方式如下:

<script>(function(d, s, id) {
        var js, fjs = d.getElementsByTagName(s)[0];
        if (d.getElementById(id)) return;
        js = d.createElement(s); js.id = id;
        js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId=APP_ID";
        fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'facebook-jssdk'));
</script>

但是,我已经看到它是这样做的:

<script src="http://connect.facebook.net/en_US/all.js"></script>
...
FB.init(APP_ID, true, true, true);

这两者之间有什么区别(实际上)?

我正在编写一个使用社交插件的GWT应用程序。加载它的最佳方法是什么?

3 个答案:

答案 0 :(得分:1)

我没有直接使用facebook api,虽然我写了很多GWT,与页面级JavaScript集成

查看ScriptInjector类 - 一个方法允许您注入一个字符串,另一个方法允许您从url注入脚本并在加载时获得回调。

另一个想法:JSNI允许您从Java应用程序中调用javascript。如果您可以在页面加载时包含该脚本标记,则可以从Java方法调用FB.init

private native void nativeFbInit(String appId) /*-{
    $wnd.FB.init(appId, true, true, true);
}-*/;

答案 1 :(得分:1)

不同之处在于第一种方法是异步的,而后者是同步的。 如果你希望页面加载/渲染速度更快,你可以用fb sdk来实现这个目的(显示页面),然后选择第一个。

答案 2 :(得分:1)

我建议使用第一种方法,因为它会异步加载库,有助于防止“阻塞”页面加载的其余部分。例如,如果您使用第二种方法并且Facebook因响应服务JS文件而失败或缓慢,那么在尝试下载脚本时,您的整个页面可能会“坐在那里”。

然而,据说,根据我自己的经验,我有时会对异步版本发生“怪异”,最后使用第二种方法(同步版)并确保它是我之前的最后一件事。页面上显示</body>