2010-06-02 33 views
23

Tôi đang sử dụng sdk facebook javascript để nhúng một nút tương tự vào trang của tôi.facebook javascript sdk fb_xd_fragment?

fb_xd_fragment là gì? Tôi thấy nó gắn vào cuối url của tôi như http://www.example.com/controller/?fb_xd_fragment và điều này đang gây ra một số tải lại đệ quy khó chịu của trang.

+1

Tôi nhận được cùng một hành vi, máy chủ bị tấn công với hai yêu cầu - 1 với URI chuẩn; cái còn lại với URI? fb_xd_fragment. Tuy nhiên điều này dường như chỉ xảy ra trong IE - cụ thể hơn là IE7. Bạn đã quản lý để có thêm thông tin về điều này? Tất cả đều có từ FB: http://forum.developers.facebook.com/viewtopic.php?pid=232516 và một lỗi đã được mở: http://bugs.developers.facebook.com/show_bug.cgi?id=9777 –

+1

Có, rất cụ thể cho IE7, tôi đã sử dụng phiên bản Iframe, hy vọng ai đó sẽ sửa lỗi đó. –

Trả lời

23

Sau nhiều tuần cố gắng để tìm một giải pháp có vẻ như những gì cần thiết là một url kênh tùy chỉnh như đã đề cập ở đây:

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

Tất cả tôi đã làm là tạo ra channel.html tập tin chứa single này dòng:

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

Sau đó, tôi thêm channelUrl: dòng để kết quả cuối cùng trông như thế này:

<div id="fb-root"></div> <script> 
window.fbAsyncInit = function() { 
    FB.init({ 
     appId : 'MY APP ID', 
     status : true, // check login status 
     cookie : true, // enable cookies to allow the server to access the session 
     xfbml : true, // parse XFBML 
     channelUrl : 'http://www.example.com/channel.html' // custom channel 
    }); }; 

    (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); 
}());</script> 

Đảm bảo thêm dấu phẩy sau xfbml: true nếu đó là dòng cuối cùng của bạn. Tôi không quen thuộc với Javascript vì vậy tôi không biết nếu tôi đang tận dụng đầy đủ lợi thế này, nhưng tôi biết nó ngăn chặn các vấn đề fb_xd_fragment và cho phép FB ý kiến ​​trong IE. Theo như tôi có thể nói, đây là giải pháp ONLY có sẵn trực tuyến. Bất kỳ điều chỉnh thêm nào đều được hoan nghênh.

+1

Tôi đã làm điều này và cũng đã thêm xmlns: fb = "http://www.facebook.com/2008/fbml" vào thẻ của mình và thẻ hiện đang hoạt động! Vấn đề rất khó chịu. Tôi đã thêm mã bạn đang đăng ở đó và sau đó bên dưới trên trang vừa in một hộp tương tự và hộp nhận xét. –

+0

URL cuối cùng bạn đưa vào channelURL là gì? Chúng tôi đã thử rằng ở đây, với một trang html tùy chỉnh trên máy chủ của chúng tôi và nó cố gắng để tạo ra một "trang facebook", thực sự kỳ lạ. – Allov

+0

Tôi phải thêm xmlns: fb = "facebook.com/2008/fbml"; như Ferran đã làm hoặc nó sẽ liên tục thăm dò ý kiến. Đó là bit cuối cùng đã sửa nó :) – Designer023

0

affer vài ngày nghiên cứu và expriment với tất cả các giải pháp trên internet cuối cùng tôi đưa ra kết hợp của

Thay đổi này đầu của bạn của trang của bạn:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:og="http://opengraphprotocol.org/schema/" xmlns:fb="http://www.facebook.com/2008/fbml" lang="en-US"> 

ở đây cocde đặt này, nơi bạn muốn nút likeit là:

<div class="yourclass" style="z-index: 10;"> 
<div id="fb-root"></div> 
<script src="http://connect.facebook.net/en_US/all.js" ></script> 
<script>FB.init({appId: '1234yourappidhere', status: true, cookie: true, xfbml: true});</script> 
<fb:like href="http..yourencodedurlswillputhere" layout="button_count" width="150" action="recommend" colorscheme="light"></fb:like></div> 
<script> document.getElementsByTagName('html')[0].style.display='block';</script> 

tín dụng wellcome: http://www.xaluan.com

0

Kênh Hack không làm việc cho tôi. Vì vậy, tôi chỉ cần thêm trên tất cả các nội dung khác trong PHP tôi nộp một số mã 301 chuyển hướng đến URL mà không cần sự bổ sung fb_xd_fragment:

$url = "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']; 

if (isset($_GET['fb_xd_fragment'])) { 
$url = str_replace("?fb_xd_fragment=","",$url); 
header("HTTP/1.1 301 Moved Permanently"); 
header("Location: {$url}"); 
exit(); 
} 
3

giải quyết với các iframe nút như thế nào.

1

Tôi đã sử dụng cách tiếp cận trong tập lệnh để xác định channelUrl thành một trang trên trang web của tôi, nhưng tôi vẫn nhận được nhiều lần truy cập trở lại trang đó.Sau khi xem lưu lượng kết quả với WireShark, tôi nhận thấy họ (Facebook) sử dụng channelUrl cho một số cuộc gọi nội bộ của riêng họ, cũng chuyển fb_xd_fragment - thay vào đó tôi sử dụng URL đó cho channelUrl, chuyển hướng nó ra khỏi trang web của tôi.

Tôi có nhiều nút Thích trên trang web của mình bằng cách sử dụng fbml thay vì khung và trên IE7, tôi không còn nhận được một lần truy cập từ Facebook với tham số fb_xd_fragment nữa.

Không chắc đây có phải là phương pháp hay nhất hay không nhưng có vẻ như nó hoạt động.

Tôi đặt giá trị này cho channelUrl:

'http://static.ak.fbcdn.net/connect/xd_proxy.php'

Hope this helps.

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