2012-11-29 68 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'}); 
} 
};