如何使用Javascript/jQuery将信息从查询字符串传递到Facebook中的页面选项卡应用程序

How to pass information from a query string to a page tab app in Facebook using just Javascript/jQuery

本文关键字:Facebook 应用程序 选项 jQuery Javascript 何使用 信息 字符串 查询      更新时间:2024-05-26

我正试图将一条信息(使用查询字符串)传递给我的Facebook页面选项卡应用程序。

例如,如果用户单击以下URL:

-http://apps.facebook.com/myappname/?app_data=mydata

我希望能够访问应用程序中的"mydata"。

根据我所做的阅读,Facebook不允许GET请求,但使用app_datasigned_request可以做到这一点。

然而,我还没有找到任何关于如何使用JavaScriptSDK(这可能吗?)和.NET(理想情况下,我只需要javascript就可以实现)来设置这一点的信息。我不知道如何使用signed_request设置和读取数据,而且关于signed_rerequests的文档让我困惑,而不是帮助。我非常想要关于如何实现此功能的简单说明。

编辑:

我想我几乎已经想通了。如果有其他人在寻找答案,我把我迄今为止所做的事情放在下面。另外,如果你认为还有改进的地方,请告诉我。我不认为这是完美的,但它是有效的。

首先,url需要是页面选项卡url,而不是应用程序的直接url(就像我在上面发布的):-http://www.facebook.com/pages/PageName/########?sk=app_#########&app_data=mydata

以下是适用于我的javascript代码:

//get value of signed request and split it 
var signedRequest = $('#mainContent_hfSigned').val().split(".");
//decode json (this does not work on ie - needs to be replaced)
var decodedJson = window.atob(signedRequest[1]);
//parse json to gain access to parameters
var jsonParams = jQuery.parseJSON(decodedJson);
//append the app_data varible to ensure it's being read properly
$('.message').append('Your app_data param is "' + jsonParams.app_data + '"')

在jsfiddle上:http://jsfiddle.net/C3xsm/1/

我知道我仍然需要做的一件事是用javascript的base64url解码器替换atob。我正在考虑使用这个:

http://code.google.com/p/stringencoders/source/browse/trunk/javascript/base64.js

如果它运行良好,我会在这里更新它。或者,如果有人知道一些效果更好的东西,请告诉我。

理想情况下,我只需要JavaScript 就可以实现这一点

这是不可能的,因为正如您已经发现的那样,signed_request参数是POST到您的页面上的,并且JavaScript无法访问POST参数本身。

signed_request参数的文档中有关于如何在服务器端解析/解码它的说明;这个例子是用PHP编写的,但是将基本算法(如果可以调用的话)转移到.NET环境应该很容易。