1

我正在尝试使用 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 访问框架

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

4

3 回答 3

2

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

铬/Safari

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

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

一个重要的注意事项是警报取决于 Like 的成功,这取决于 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,甚至没有出现 Like 按钮。

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

IE浏览器

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

<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml">
于 2011-07-23T01:00:52.473 回答
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>

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

<script src="http://connect.facebook.net/en_US/all.js"></script>
于 2011-11-04T19:35:38.680 回答
0

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

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

于 2012-10-29T18:10:50.477 回答