5

Tôi có mã sau nhưng FB.login cung cấp lỗi FB không được xác định là javascript.FB không được xác định trong Facebook Đăng nhập

Tôi đang thiếu gì?

<html> 
<body> 
<div id="fb-root"></div> 
<script> 
window.fbAsyncInit = function() 
{ 
FB.init 
({ 
    appId : 'XXXX', 
    status : true, 
    cookie : true, 
    xfbml : true 
}); 
}; 

(function() 
{ 
var e = document.createElement('script'); 
e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js'; 
e.async = true; 
document.getElementById('fb-root').appendChild(e); 
}()); 



FB.login(function(response) 
{ 
if(response.session) 
{ 
    if(response.perms) 
    { 
     alert('yippee'); 
    } 
    else 
    { 
     alert('oh no'); 
    } 
} 
else 
{ 
    alert('login silly'); 
} 
}, {perms:'email,user_birthday'}); 


</script> 
hello 
<fb:login-button></fb:login> 

</body> 
</html> 

Trả lời

7

Hàm được gán cho window.fbAsyncInit sẽ chạy ngay khi SDK được tải. Bất kỳ mã nào mà bạn muốn chạy sau khi SDK được nạp phải được đặt trong hàm này và sau lệnh gọi tới FB.init. Ví dụ, đây là nơi bạn sẽ kiểm tra trạng thái đăng nhập của người dùng hoặc đăng ký bất kỳ sự kiện Facebook nào mà ứng dụng của bạn quan tâm.

Hãy thử bằng cách giữ mã khởi tạo khác ở giữa inialization và đăng nhập chức năng

Hoặc giữ mã FB.login trong $ (document) .ready

$(document).ready(function(){ 

FB.login(function(response) 
{ 
if(response.session) 
{ 
    if(response.perms) 
    { 
     alert('yippee'); 
    } 
    else 
    { 
     alert('oh no'); 
    } 
} 
else 
{ 
    alert('login silly'); 
} 
}, {perms:'email,user_birthday'}); 

}); 
5

Bạn không nên gọi điện để FB.login trước JS-SDK được nạp, window.fbAsyncInit thiết kế đặc biệt cho việc này. Nếu bạn di chuyển cuộc gọi này ở trong chức năng window.fbAsyncInit bạn sẽ ổn nhưng nhận thức được thực tế là hãy gọi tới FB.login mở cửa sổ bật lên, thực hiện thao tác này mà không có sự tương tác của người dùng sẽ có thể bị chặn bởi hầu hết các trình duyệt. Nếu bạn muốn sử dụng FB.login để xử lý đăng nhập, bạn phải làm điều đó trên click hoặc sumbit sự kiện ...

BTW, bạn đã có fb:login-button được làm đăng nhập khi người dùng nhấp chuột vào nó.

1

Bạn cũng có thể nhận được lỗi này nếu bạn cố gắng khởi chạy facebook example code trên máy của bạn (ví dụ: sao chép mã trong một tệp .html và cố gắng mở nó trong trình duyệt của bạn). Bạn sẽ cần phải tải nó lên máy chủ của bạn và chạy nó từ đó.

Các vấn đề liên quan