2

我正在编写一个 Facebook 应用程序,它是一个我用 javascript 实现的简单棋盘游戏。Facebook 似乎只允许 javascript 应用程序在 iframe 中运行,所以我正在使用<fb:iframe>. 我只想能够告诉 javascript 用户的 ID,这样我就可以告诉用户是否轮到他了,但我找不到有关从 fb:iframe 中访问 facebook 数据的文档。我可能缺少一些基本的 conecpt,因为我不太了解 facebook API。

4

4 回答 4

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 应用程序”,因为您可能不会<fb:iframe>在“Iframe 应用程序”中使用标签。src尽管如此,这两种情况下的渲染方法都是相似的,并且您也会在“Iframe 应用程序”中为您的文档添加大量额外内容。

但是,这实际上只会在 iframe 的第一次加载时将 Facebook 用户 ID 传递给您。iframe 中的后续操作将无法访问该用户 ID,除非您明确传递它。

脸书连接

如果您想在 iframe 中与 Facebook 交互,那么 Facebook Connect Javascript 库就派上用场了。关于设置 Facebook Connect 的最佳说明可能是这个 wiki 页面,但它仍然有点模糊。Facebook Connect 既可用于完全外部的站点,也可用于 iframe 内的常规内容。您属于后一类,因此如果您按照该链接中的说明并使用步骤 2 中的第一行代码(对于 FeatureLoader),您应该没问题。

包含 FeatureLoader.js 脚本并调用 FB.init 后,您通常应该可以使用 FB Connect 启动并运行。从那时起,您应该能够与API进行交互。该users.getLoggedInUser()方法将通过 Javascript 为您提供 iframe 中的当前用户 ID。

希望有帮助。

于 2009-06-30T06:13:40.870 回答
1

请注意,截至 2011 年 3 月,FB 正在转向 POST 请求以加载 iframe。它发送一个带有 method="post" 和 target="iframe_canvas" 的表单动作,以及一个带有 "signed_request" 的输​​入 type="hidden"

于 2011-03-22T20:51:08.590 回答
0

您可以使用 facebook API 通过调用来获取用户 ID

用户.getLoggedInUser

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

于 2009-06-30T03:55:07.727 回答
0

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

于 2010-11-05T23:12:12.187 回答