【问题标题】:#xfbml=1 causing problems#xfbml=1 导致问题
【发布时间】:2011-06-09 09:45:02
【问题描述】:

我的网站上有两种不同的机制,同时使用 xfbml 和 fbjs:

  • 单个条目的 FB:Like 标记
  • 使用 fb connect 登录 facebook 的 FB 对象

我的问题是当我在页面上包含“all.js”时,登录脚本有效,但 fb:like 标记无效。

当我包含“all.js#xfbml=1”时,fb:like 标签再次起作用,但现在我的 FB 对象未定义并且我的登录代码不起作用。

我有什么遗漏吗?

提前感谢您提供的任何帮助。

【问题讨论】:

    标签: javascript facebook fbml xfbml


    【解决方案1】:

    您只需要包含一次脚本引用并在页面加载时在脚本上调用init。您可以将其用于 fb:like 按钮或登录脚本。

    <div id="fb-root"></div>
    <script src="http://connect.facebook.net/en_US/all.js"></script>
    <script>
      FB.init({
        appId  : 'YOUR APP ID',
        status : true, // check login status
        cookie : true, // enable cookies to allow the server to access the session
        xfbml  : true  // parse XFBML
      });
    </script>
    

    关键是将 xfbml 设置为 true(这就是 #xfbml=1 的作用)。如果您没有该设置,则类似按钮将不会呈现。

    如果您想订阅登录事件,只需在 FB.init() 调用之后添加以下脚本:

      FB.Event.subscribe('auth.login', function(response) {
        window.location.reload(); // or something else...
      });
    

    只有当用户点击链接、按钮等时才会触发您的登录脚本。

    function doLogin() {
       FB.login(function(response) {
         if (response.session) {
           if (response.perms) {
             // user is logged in and granted some permissions.
             // perms is a comma separated list of granted permissions
           } else {
             // user is logged in, but did not grant any permissions
           }
         } else {
           // user is not logged in
         }
       }, {perms:'read_stream,publish_stream,offline_access'});
    }
    

    【讨论】:

    • 确实只包含一个或另一个,但放入 1 个版本会破坏另一个。
    【解决方案2】:

    将此 xmlns 添加到您的 html 标记中

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

    并包含“all.js”

    【讨论】:

      猜你喜欢
      • 2011-03-14
      • 2020-09-22
      • 1970-01-01
      • 1970-01-01
      • 2011-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多