我正在编写一个Facebook应用程序,这是一个简单的棋盘游戏,我已经用javascript实现了。 Facebook似乎只允许javascript应用程序在iframe中运行,因此我使用<fb:iframe>
加载页面。我只是希望能够告诉用户的javascript,以便我可以告诉用户是否轮到他了但是我找不到关于从fb:iframe中访问facebook数据的文档。我可能错过了一些基本的conecpt,因为我不太了解facebook API。
答案 0 :(得分:3)
Facebook的API非常难以遵循,而且文档很差。你是对的Javascript ...正常的Javascript只适用于Facebook上的iframe,否则你只能被称为FBJS的过滤Javascript的子集。您可以放心地忽略文档中关于FBJS的任何内容,并专注于iframe。
iframe加载
我要提到的第一件事是,<fb:iframe>
标记实际上会在src
属性中使用大量内容进行渲染。因此,如果您将这样的标记放入您的Facebook页面:<fb:iframe src="http://example.com/page?x=y">
,当它加载到用户的浏览器时最终会变成这样:
<iframe src="http://example.com/page?x=y&fb_sig_in_iframe=1&fb_sig_locale=en_US&fb_sig_in_new_facebook=1&fb_sig_time=1246340245.3338&fb_sig_added=1&fb_sig_profile_update_time=1242155811&fb_sig_expires=1246345200&fb_sig_user=000000001&fb_sig_session_key=2.d13uVGvWVL4hVAXELgxkZw__.3600.1246345200-000000001&fb_sig_ss=mZtFjaexyuyQdGnUz1zhYTA__&fb_sig_api_key=46899e6f07cef023b7fda4fg2e21bc58&fb_sig_app_id=22209322289&fb_sig=bbc165ebc699b12345678960fd043033">
fb_sig_user
(这里是000000001)。我假设您的应用设置为“FBML应用”,因为您可能不会在“Iframe应用”中使用<fb:iframe>
标记。尽管如此,渲染方法在两种情况下都是相似的,并且您在“Iframe应用程序”中的src
文档中也会获得一些额外的内容。
但是,这只会在第一次加载iframe时通过Facebook用户ID。 iframe中的后续操作将无法访问该用户ID,除非您明确传递它。
Facebook Connect
如果您想从iframe中与Facebook进行互动,那就是Facebook Connect Javascript库的用武之地。设置Facebook Connect的最佳说明可能是this wiki page,但它仍然有点模糊。 Facebook Connect既可用于完全外部网站,也可用于iframe内的常规内容。您属于后一类,因此如果您按照该链接中的说明操作并使用步骤2中的第一行代码(对于FeatureLoader),您应该没问题。
一旦你包含了FeatureLoader.js脚本并调用了FB.init,你通常应该启动并运行FB Connect。从那时起,您应该可以与API进行互动。 users.getLoggedInUser()
方法将通过Javascript为您提供iframe中的当前用户ID。
希望有所帮助。
答案 1 :(得分:1)
请注意,截至2011年3月,FB正在转向POST请求以加载iframe。它使用method =“post”和target =“iframe_canvas”发送表单操作,并使用“signed_request”发送输入类型=“hidden”
答案 2 :(得分:0)
您可以通过调用
使用facebook API获取用户ID您可以访问该值,然后使用echo()将其作为javascript变量添加到HTML中,这将使其可用于您的Javascript代码。
答案 3 :(得分:0)
尝试Env.user
,它具有登录用户的ID。