2012-02-07 34 views
8

Tôi đang sao chép mã ngay trên this page trên trang web dành cho nhà phát triển của Facebook và phương thức fbAsyncInit() không bao giờ kích hoạt. Tôi cũng đã đọc this page, tôi đã chỉnh sửa mã theo một vài cách khác nhau và tôi không thể có được phương pháp để kích hoạt. Suy nghĩ của bạn?Javascript: Phương thức fbAsyncInit() của tôi không bao giờ được gọi là

Ngoài ra, cho những gì nó có giá trị, khi tôi cố gắng và chạy mã này và Chrome (trên Mac) và chạy Firebug Lite, tôi nhận được một lỗi mà nói "Firebug Lite không thể được nạp trong trang này"

Dưới đây là mã ...

<html> 
<head> 
</head> 
<body> 
<div id="fb-root"></div> 
<script type="text/javascript"> 
    window.fbAsyncInit = function() { 
    FB.init({ 
     appId  : '1234567890', // App ID 
     channelUrl : '//localhost/test.html', // Channel File 
     status  : true, // check login status 
     cookie  : true, // enable cookies to allow the server to access the session 
     xfbml  : true // parse XFBML 
    }); 

    alert("this statement never gets called either"); 
    }; 

    // Load the SDK Asynchronously 
    (function(d){ 
    var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;} 
    js = d.createElement('script'); js.id = id; js.async = true; 
    js.src = "//connect.facebook.net/en_US/all.js"; 
    d.getElementsByTagName('head')[0].appendChild(js); 
    }(document)); 
</script> 
</script> 
</body> 
</html> 
+0

là tập tin của bạn được gọi là test.html? – DMCS

+0

vâng, đó là một vấn đề? – BeachRunnerFred

+0

Có lỗi js nào không? –

Trả lời

5

Bạn có vấn đề với tải Đồng bộ không?

<script src="//connect.facebook.net/en_US/all.js"></script> 
<script> 
    FB.init({ 
    appId  : 'YOUR_APP_ID', 
    channelUrl : '//WWW.YOUR_DOMAIN.COM/channel.html', // Channel File 
    status  : true, // check login status 
    cookie  : true, // enable cookies to allow the server to access the session 
    xfbml  : true // parse XFBML 
    }); 
</script> 
+0

Có, khi tôi điều chỉnh mã để trông giống như mã đồng bộ của bạn, phương thức cảnh báo vẫn không bao giờ kích hoạt. Đưa cái gì? Chỉ khi tôi loại bỏ phương thức FB.init() làm phương thức cảnh báo cháy – BeachRunnerFred

+0

Tôi không biết ... anh chàng này đang tải không đồng bộ và dường như nó làm việc cho anh ta: http://facebook.stackoverflow.com/questions/ 2855784/facebook-graph-api-fb-login-gọi-trước-gọi-fb-init mã tại các công trình hàng đầu, nếu bạn đọc câu trả lời, ông chỉ cho đã đưa vào bên phải appid –

+0

@BeachRunnerJoe nó trông giống như anh ta đang thêm kịch bản dưới đây vào div fb-root, thay vì đầu. –

0

Kể từ khi cả hai tập tin của bạn được gọi là test.html và channelUrl được coi là test.html, bạn đang tạo một tròn tham khảo. Đối với channelUrl thích nó là vụ phải chỉ chứa một dòng

<script src="//connect.facebook.net/en_US/all.js"></script>

http://developers.facebook.com/docs/reference/javascript/

File kênh giải quyết một số vấn đề với truyền thông miền chéo trong trình duyệt nhất định. Nội dung của tập tin channel.html có thể chỉ một dòng duy nhất:

<script src="//connect.facebook.net/en_US/all.js"></script>

Điều quan trọng là các tập tin kênh được lưu trữ càng lâu càng càng tốt. Khi phân phối tệp này, bạn phải gửi các tiêu đề hết hạn hợp lệ với thời gian hết hạn dài. Điều này sẽ đảm bảo tệp kênh là được lưu trong bộ nhớ cache bởi trình duyệt quan trọng đối với trải nghiệm người dùng mượt mà. Nếu không có bộ nhớ đệm thích hợp, giao tiếp tên miền chéo sẽ trở nên rất chậm và người dùng sẽ bị trải nghiệm nghiêm trọng. Một cách đơn giản để làm điều này trong PHP là:

<?php $cache_expire = 60*60*24*365; header("Pragma: public"); header("Cache-Control: max-age=".$cache_expire); header('Expires: ' . gmdate('D, d M Y H:i:s', time()+$cache_expire) . ' GMT'); ?> <script src="//connect.facebook.net/en_US/all.js"></script> 

Tham số channelUrl không bắt buộc nhưng khuyến khích. Cung cấp tệp kênh có thể giúp giải quyết ba vấn đề đã biết cụ thể. Đầu tiên, các trang bao gồm mã để giao tiếp trên các khung có thể khiến các Plugin mạng xã hội hiển thị trống khi không có URL kênh. Thứ hai, nếu không có kênhUrl được cung cấp và trang bao gồm âm thanh phát tự động hoặc video, người dùng có thể nghe thấy hai luồng âm thanh vì trang có được tải lần thứ hai trong nền cho tên miền chéo liên lạc. Thứ ba, tệp kênh sẽ ngăn không cho thêm lượt truy cập vào nhật ký phía máy chủ của bạn. Nếu bạn không chỉ định channelUrl, bạn có thể xóa lượt xem trang chứa các thông số fb_xd_bust hoặc fb_xd_fragment từ nhật ký của bạn để đảm bảo số lượng phù hợp.

URL kênh phải là URL đủ điều kiện phù hợp với trang trên mà bạn bao gồm SDK. Nói cách khác, miền tệp kênh phải bao gồm www nếu trang web của bạn được phân phát bằng www và nếu bạn sửa đổi tài liệu .tên miền trên trang của bạn, bạn cũng phải thực hiện cùng một tệp document.domain thay đổi trong tệp channel.html. Các giao thức cũng phải phù hợp với . Nếu trang của bạn được phân phối qua https, URL kênh của bạn cũng phải là https. Hãy nhớ sử dụng giao thức phù hợp cho tập lệnh src là . Mã mẫu ở trên sử dụng các URL tương đối giao thức cần xử lý hầu hết các trường hợp https đúng cách.

+0

Cảm ơn, DMCS, tôi đã xóa tham số channelUrl tùy chọn và phương pháp này vẫn không bao giờ kích hoạt. Suy nghĩ của bạn? – BeachRunnerFred

+0

Thử xóa một trong hai thẻ kết thúc ' 'làm thẻ phụ và có thể khiến trình duyệt của bạn không thích nó. – DMCS

+0

vâng tôi đã khắc phục điều đó, nó không giúp được – BeachRunnerFred

0

Câu trả lời này có lẽ là quá muộn và đối với nhiều trường hợp wont giúp nhưng, tôi phát hiện ra rằng trình duyệt Firefox của tôi sau khi một số công việc khá rõ ràng có được một chút điên và gây rằng lỗi chính xác ... chỉ cần khởi động lại damn thing

+0

OK Tôi chỉ tìm thấy nguồn chính xác của vấn đề, tôi sử dụng FF để phát triển và tôi sử dụng Scratchpad (Tools-> Web Developer-> Scratchpad) theo thời gian .... từ một số lý do nó gây ra vấn đề này ngay cả khi tôi chỉ cần làm một cảnh báo đơn giản() ở đó ... hy vọng nó giúp ai đó –

+0

OK bỏ qua "ngay cả khi" ở trên, nó gây ra vấn đề KHI một cảnh báo() được phát hành từ Scratchpad –

+0

https://bugzilla.mozilla.org/ show_bug.cgi? id = 678971 –

4

Bạn nên thay đổi:

js.src = "//connect.facebook.net/en_US/all.js"; 

tới:

js.src = "http://connect.facebook.net/en_US/all.js"; 
+1

điều này đã sửa nó cho tôi ... –

+1

wtf ?? không biết làm thế nào tôi sẽ bao giờ tìm ra rằng wtthout SO –

+23

không tốt, điều này sẽ phá vỡ ứng dụng của bạn nếu bạn đang tải từ HTTPS. nếu bạn buộc phải thực hiện bất kỳ giao thức nào, hãy đảm bảo sử dụng HTTPS. – maskedbacon

7

tôi đã cùng một vấn đề. Dường như tôi đã tải thư viện JavaScript //connect.facebook.net/en_US/all.js ở một số nơi khác trước khi tải async.

Điều đó có thể gây nhầm lẫn một chút.

Tôi đã xóa định nghĩa thẻ tải sớm và bây giờ tôi đã ổn.

+0

Điều này phù hợp với tôi! Cảm ơn. – Seunghoon

+0

Đây là giải pháp cho vấn đề! – raBne

0

Hãy Thay đổi ID App của bạn sau đó bắt đầu làm việc

<script> 
    window.fbAsyncInit = function() { 
    FB.init({ 
     appId   : 'your-app-id', 
     autoLogAppEvents : true, 
     xfbml   : true, 
     version   : 'v2.11' 
    }); 
    }; 

    (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 = "https://connect.facebook.net/en_US/sdk.js"; 
    fjs.parentNode.insertBefore(js, fjs); 
    }(document, 'script', 'facebook-jssdk')); 
</script> 
Các vấn đề liên quan