如何从fb:iframe中的javascript访问Facebook用户ID?

时间:2009-06-30 03:48:28

标签: javascript facebook facebook-iframe

我正在编写一个Facebook应用程序,这是一个简单的棋盘游戏,我已经用javascript实现了。 Facebook似乎只允许javascript应用程序在iframe中运行,因此我使用<fb:iframe>加载页面。我只是希望能够告诉用户的javascript,以便我可以告诉用户是否轮到他了但是我找不到关于从fb:iframe中访问facebook数据的文档。我可能错过了一些基本的conecpt,因为我不太了解facebook API。

4 个答案:

答案 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">

Facebook为src​​增加了大量内容。告诉您用户的Facebook ID的参数是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

Users.getLoggedInUser

您可以访问该值,然后使用echo()将其作为javascript变量添加到HTML中,这将使其可用于您的Javascript代码。

答案 3 :(得分:0)

尝试Env.user,它具有登录用户的ID。