无法获得'edge.create'回调与facebook javascript SDK一起使用

时间:2011-05-11 21:58:37

标签: facebook facebook-javascript-sdk

我正在尝试使用Facebook javascript SDK的'edge.create'回调函数,在用户点击页面上的like按钮时发送提醒。最终我的目标是让它在页面上重新生成样式,以便它可以在单击时动态调整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尝试使用网址访问框架

后来说域,协议和端口必须匹配。

3 个答案:

答案 0 :(得分:2)

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

铬/ Safari浏览器

尝试将Like按钮URL设置为现有网址:

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

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

当我在Chrome 12 for Mac中更改Like按钮并提醒工作时,我仍然会看到与您相同的错误。我认为Chrome对iframe很敏感;我怀疑可以避免错误。

火狐

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

如果我将all.jsFB.Event.subscribe()脚本移到fb-root div下方,则会显示“赞”按钮并且警报无效。

Internet Explorer

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

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

答案 1 :(得分:0)

您必须指明您的应用程序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>

P.S。在http://www.YOURSITE/channel.html文件内,放下一行 -

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

答案 2 :(得分:0)

你不能在Facebook应用程序中使用alert(),至少不能在Chrome中使用{如果Firefox仍然允许,它们可能不会更长时间。)

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