2012-11-29 33 views
2

我有一个需要从图形API查询大量数据的Facebook应用程序。我目前可以使用Facebook的javascript-sdk获取所有数据,但用户必须等待facebook才能每次返回查询(.5-1.0秒)。我想把这个功能放在一个javascript web worker中,这样它就可以在后台连续运行,并在用户需要时将数据存储在一个javascript数组中。了Facebook的JavaScript SDK和一个网络工作者

我是新来的JavaScript网络工作者,但我知道,他们有阻止他们访问限制如下:

  • 的DOM(它不是线程安全的)
  • 窗口对象
  • 文档对象
  • 父对象

做这些限制阻止我能够加载ŧ他在我的网络工作者的Facebook Javascript-SDK并使用它来拨打电话?

而且,我尝试使用:importScripts("http://connect.facebook.net/en_US/all.js");作为一种替代方式来加载它给了我一个“未捕获未定义”错误的脚本。

目前,我有我的网络工作者传递数据,并从我的网页(包括用户访问令牌),但我不知道怎么做,而不SDK API调用。

注:我的应用程序使用只有JavaScript,没有数据库,没有后端服务器的代码(PHP,红宝石等)。我需要保持这种方式。

回答

0
curl http://connect.facebook.net/en_US/all.js -s | grep "document" -q && echo "Nope." 

就这样,您不必实际执行此操作:它将打印“不需要”。

对不起。

这就是说:你应该看看async国旗XMLHttpRequest.open

1

当您连接到Facebook的SDK,你应该在响应收到的accessToken。

FB.Event.subscribe('auth.authResponseChange', function(response) { 
    if (response.status === 'connected') { 
    var accessToken = response.authResponse.accessToken; 
    } 
}); 

发送的accessToken到Web工人:

var myWorker = new Worker(url); 
myWorker.sendMessage({accessToken:accessToken}); 

现在你可以使用XMLHttpRequest和Facebook的图形API(网络工作者内):

//inside your worker 
onmessage = function (oEvent) { 
var accessToken = oEvent.data.accessToken; 
if(accessToken){ 
    function loaded(){ 
     var fbResponse = this.responseText; 
     postMessage({fbData: fbResponse}); 
    } 

    var xhr = new XMLHttpRequest(); 
    xhr.onload = loaded; 
    if (xhr != null) { 
     xhr.open('get', 'https://graph.facebook.com/me?type=normal&method=GET&access_token='+accessToken, true); 
     xhr.send(); 
    }else { 
     postMessage({error: 'XHR not supported'}); 
    } 
}else{ 
    postMessage({error: 'No access token'}); 
} 
};