我正在尝试使用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&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尝试使用网址访问框架
后来说域,协议和端口必须匹配。
答案 0 :(得分:2)
根据您的描述,我猜您是在本地服务器上使用Chrome / 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.js
和FB.Event.subscribe()
脚本移到fb-root
div下方,则会显示“赞”按钮并且警报无效。
根据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控制台以查看发出的消息。