3

當我的點擊處理程序在客戶端上調用logIn()函數時,我看到一個FB彈出窗口和一個在User集合中創建的記錄,但回調方法從不會被調用。相反,我看到在JS控制檯Parse.com Facebook API的logIn()方法。回調永遠不會被調用

Uncaught TypeError: Cannot read property 'getTime' of null parse-1.2.18.min.js:3 

在這裏,下面是我的網頁

設置FB API的代碼

<script> 
    window.fbAsyncInit = function() { 
     Parse.FacebookUtils.init({ 
     appId  : 757503280935086, 
     xfbml  : true, 
     version : 'v2.0' 
     }); 
    }; 

    (function(d, s, id){ 
     var js, fjs = d.getElementsByTagName(s)[0]; 
     if (d.getElementById(id)) {return;} 
     js = d.createElement(s); js.id = id; 
     js.src = "//connect.facebook.net/en_US/sdk.js"; 
     fjs.parentNode.insertBefore(js, fjs); 
    }(document, 'script', 'facebook-jssdk')); 
</script> 

調用登錄方法

$scope.signupFB = function() { 
    Parse.FacebookUtils.logIn(null, { 
     success: function(user) { 
     //never get here 
     $timeout(function() { 
      $rootScope.theUser = user; 
      $location.path("/properties"); 
     }); 
     }, 
     error: function(user, error) { 
     $scope.error = "User cancelled the Facebook login or did not fully authorize."; 
     } 
    }); 
    } 

的FB應用程序已啓用網站「平臺」。

下一次,我試着在我JS控制檯看到

Uncaught Error: Setting authResponse is not supported 

+0

任何喜悅這個我得到太 –

回答

3

問題來自使用v2 facebook api。

用蒂莫西的修復工作切換到舊版本。

window.fbAsyncInit = function() { 
     Parse.FacebookUtils.init({ 
      appId  : '' // Facebook App ID 
     }); 
    }; 
    (function(d, s, id){ 
     var js, fjs = d.getElementsByTagName(s)[0]; 
     if (d.getElementById(id)) {return;} 
     js = d.createElement(s); js.id = id; 
     js.src = "//connect.facebook.net/en_US/all.js"; 
     fjs.parentNode.insertBefore(js, fjs); 
    }(document, 'script', 'facebook-jssdk')); 

通知包括all.js不sdk.js

+0

我有這個問題要感謝蒂莫西和皮特,你已經救了我的培根! –

4

注意:當Facebook修復API調用以舊字符串格式返回日期時,此修復程序不再是必需的(而是實際上將其中斷)。

Facebook最近添加了API的v2.0,不幸的是他們破解了Parse。特別是Parse使用非常嚴格的規則來閱讀來自Facebook響應的日期。

一種解決方法是下載語法分析1.2.18.js文件,並更新Parse._parseDate功能,然後加載JS文件到您的網站,並改變你的網頁來使用,而不是當前版本:

Parse._parseDate = function(iso8601) { 
    var regexp = new RegExp(
     "^([0-9]{1,4})-([0-9]{1,2})-([0-9]{1,2})" + "T" + 
     "([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})" + 
     "(.([0-9]+))?" + "Z$"); 

它更新到這一點:

Parse._parseDate = function(iso8601) { 
    var iso8601 = iso8601.split(「+」)[0] + 「Z」; 
    var regexp = new RegExp(
     "^([0-9]{1,4})-([0-9]{1,2})-([0-9]{1,2})" + "T" + 
     "([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})" + 
     "(.([0-9]+))?" + "Z$"); 

基本上是剛剝離任何「+00:00」從端上添加「Z」回去,使其再次工作。

你可以使其更加堅固(如果Facebook的恢復到舊的日期格式),通過使用這個代替:

var iso8601 = iso8601.split(「+」)[0].split(「Z」)[0] + 「Z」; 

這樣,如果在「Z」被放回到我們以前它搶的一切,不要打破。

在Facebook錯誤跟蹤器中記錄了一個錯誤,該錯誤還顯示更新後的regexp可以同時使用,但我沒有鏈接。

更新:還請確保您使用的是正確版本的API。

如果按照在Facebook上的說明,現在,他們希望你有這樣一段:

(function(d, s, id){ 
    var js, fjs = d.getElementsByTagName(s)[0]; 
    if (d.getElementById(id)) {return;} 
    js = d.createElement(s); js.id = id; 
    js.src = "//connect.facebook.net/en_US/sdk.js"; 
    fjs.parentNode.insertBefore(js, fjs); 
}(document, 'script', 'facebook-jssdk')); 

請注意,如果您使用的是sdk.js你需要一個版本的參數傳遞給init調用,這對於Parse最終會看起來像這樣:

window.fbAsyncInit = function() { 
    Parse.FacebookUtils.init({ 
     appId  : yourAppId, 
     xfbml  : true, 
     version : 'v1.0' 
    }); 
}; 

我們明確地將版本設置爲1。0直到Parse更新他們的代碼來處理2.0。

+0

謝謝你,先生! – mkvakin

+0

即使在添加此修復程序後,我現在在登錄時得到'未捕獲的錯誤:設置authResponse不受支持 – Abadaba

+0

檢查我的答案,應該修復您的問題 – Peeter

相關問題