【问题标题】:Can't get 'edge.create' callback to work with facebook javascript SDK无法让“edge.create”回调与 facebook javascript SDK 一起使用
【发布时间】:2011-05-11 21:58:36
【问题描述】:

我正在尝试使用 Facebook javascript SDK 的“edge.create”回调函数在用户单击页面上的“赞”按钮时发送警报。最终我的目标是让它在页面上重新生成样式,以便它可以在单击时动态调整 facebook 小部件 div 的大小。即使是警报,我也无法让回调工作。

<html lang="en">
<head>
    <title></title>
    <script   src="http://connect.facebook.net/en_US/all.js#appId=216985861663967&amp;xfbml=1"></script>
    <script>
        FB.Event.subscribe('edge.create', function() {
            alert('Liked');
        });
    </script>
</head>
<body>
<div id="fb-root"></div>
<fb:like send="false" layout="button_count" show_faces="false" font=""></fb:like>

</body>
</html>

任何想法为什么这不起作用?单击按钮时会出现错误:

不安全的 JavaScript 尝试使用 URL 访问框架

然后说域、协议和端口必须匹配。

【问题讨论】:

    标签: facebook facebook-javascript-sdk


    【解决方案1】:

    根据您的描述,我猜您正在本地服务器上的 Chrome/Safari 中进行测试?

    Chrome/Safari

    尝试将您的 Like Button URL 设置为现有的 Web 地址:

    <fb:like href="http://google.com" ...
    

    重要的一点是,警报取决于点赞的成功,这取决于 Facebook 可以访问的 URL。您将无法点赞仅存在于本地服务器上的 URL(例如 http://localhost:3000/my-page.html)。显然,喜欢谷歌是一个测试修复;您可以改为将代码推送到临时服务器以获得相同的效果,但这需要更多时间和精力。

    当我进行此更改时,Like 按钮和警报在 Mac 版 Chrome 12 中工作,但我仍然看到与您相同的错误。我认为 Chrome 对 iframe 很敏感;我怀疑这个错误是可以避免的。

    火狐

    如果我进行了上述更改,它仍然无法在 Firefox 5 for Mac 中运行。我从 Facebook 的 all.js 收到错误 e.root is undefined,甚至没有出现“赞”按钮。

    如果我将all.jsFB.Event.subscribe() 脚本移动到fb-root div 的下方,Like 按钮就会出现,并且警报会正常工作。

    Internet Explorer

    根据Facebook's documentation,您需要将 Facebook 的 XML 命名空间添加到您的 &lt;html&gt; 标记中,以便按钮在 Internet Explorer 中呈现:

    <html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml">
    

    【讨论】:

      【解决方案2】:

      您必须指明您的应用程序 ID。 如果您还没有任何应用,只需在 facebook 的开发者部分创建它即可。

      例子:

      <script>
          window.fbAsyncInit = function() {
              FB._https = true;
              FB.init({appId: 'YOURAPP', status: true, cookie: true, xfbml: true, channelURL : 'http://www.YOURSITE/channel.html'});
              FB.Event.subscribe('edge.create', function(response) {
                  alert('Liked');
              });
          };
      </script>
      

      附:在http://www.YOURSITE/channel.html 文件中,放入下一行 -

      <script src="http://connect.facebook.net/en_US/all.js"></script>
      

      【讨论】:

        【解决方案3】:

        您不能在 Facebook 应用程序中使用 alert(),至少不能在 Chrome 中使用(如果 Firefox 仍然允许,他们可能不会再使用太久了)。

        请改用console.log(),然后打开 Javascript 控制台查看发出的消息。

        【讨论】:

          猜你喜欢
          • 2014-08-29
          • 1970-01-01
          • 2019-02-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-04-26
          • 2013-01-14
          • 1970-01-01
          相关资源
          最近更新 更多