2012-07-30 32 views
0

我想单件的信息(使用查询字符串)传递给我的Facebook页面标签的应用程序信息传递到页面标签的应用程序在Facebook中。如何从查询字符串只用使用Javascript/jQuery的

例如,如果在这个网址的用户点击:

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

我希望能在该应用访问“MYDATA”。

从我读过的书中,Facebook不允许GET请求,但可以使用app_datasigned_request这样做。但是,我还没有找到任何有关如何使用JavaScript SDK(甚至有可能?)和.NET(理想情况下,我可以用JavaScript实现这个)的信息。我不知道如何使用signed_request设置和读取数据,并且有关signed_requests的文档让我感到困惑的不仅仅是帮助。我真的很喜欢关于如何实现这个功能的简单说明。

编辑:

我想我已经差点想通了。如果其他人正在寻找这个答案,我把我在下面做了什么。另外,如果你看到有任何改进的余地,请告诉我。我不认为这是完美的任何手段,但它的作品。

首先,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/

有一件事我知道我仍然需要做的是用base64url解码器的JavaScript取代ATOB。我在考虑使用这一个:

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

如果它工作得很好,我会在这里更新。或者如果有人知道更好的方法,请告诉我。

+0

你在正确的轨道上。我的建议是做更多的研究。这里有很多代码示例... – 2012-07-30 22:57:51

回答

0

理想情况下,我将能够与落实这只是JavaScript的

这是不可能的,因为你已经发现了signed_request参数被发布到您的网页,和JavaScript有POST进不去参数本身。

signed_request parameter的文档对如何解析/解码它的服务器端的指令;这个例子是用PHP编写的,但应该很容易将基本算法(如果可以称之为)传输到.NET环境中。

+0

谢谢。只是为了澄清:这是一个POST请求,但Facebook将其发布到隐藏的输入字段,以便JavaScript可以访问它。 – isognomon 2012-07-31 18:57:58

+0

什么隐藏领域?对不起,我没有看到你的意思。 – CBroe 2012-08-01 08:09:12

+0

没关系。Facebook使用发布请求中的信息并将其放入页面标签应用中的加密隐藏输入字段。它看起来是这样的:'' – isognomon 2012-08-01 13:57:19