2010-06-02 36 views
23

Estoy usando facebook javascript sdk para insertar un botón me gusta en mi página.facebook javascript sdk fb_xd_fragment?

¿Qué es fb_xd_fragment? Veo que se agrega al final de mi url como http://www.example.com/controller/?fb_xd_fragment, y esto está causando una desagradable recarga recursiva de la página.

+1

Recibo el mismo comportamiento, el servidor recibe dos solicitudes: 1 con el URI estándar; el otro con URI? fb_xd_fragment. Sin embargo, esto parece estar sucediendo solo en IE, más específicamente IE7. ¿Has logrado obtener más información sobre esto? Todo lo que hay desde FB: http://forum.developers.facebook.com/viewtopic.php?pid=232516 y un error abierto: http://bugs.developers.facebook.com/show_bug.cgi?id=9777 –

+1

Sí, muy específico para IE7, utilicé la versión Iframe, con suerte alguien arreglará ese error. –

Respuesta

23

Después de muchas semanas de intentar encontrar una solución que parece que lo que se necesita es una dirección URL canal personalizado como se ha mencionado aquí:

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

único que hice fue crear el archivo channel.html que contiene este único línea:

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

Luego añade el channelUrl: línea de lo que el resultado final es el siguiente:

<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> 

Asegúrese de agregar una coma después de xfbml: verdadero si era su última línea. No estoy familiarizado con Javascript, así que no sé si estoy aprovechando al máximo esto, pero sé que previene el problema de fb_xd_fragment y permite los comentarios de FB en IE. Por lo que puedo decir, esta es la ÚNICA solución disponible en línea. Cualquier otro ajuste es bienvenido.

+1

Lo hice y también agregué xmlns: fb = "http://www.facebook.com/2008/fbml" en mi etiqueta , ¡y está funcionando ahora! Problema muy molesto. Agregué el código que estás publicando allí, y luego debajo en la página acaba de imprimir un cuadro similar y un cuadro de comentario. –

+0

¿Cuál es la URL final que ingresas en channelURL? Lo intentamos aquí, con una página html personalizada en nuestro servidor e intenta crear una "página de Facebook", realmente extraña. – Allov

+0

Tuve que agregar xmlns: fb = "facebook.com/2008/fbml"; como lo hizo Ferran o sondearía constantemente. Ese fue el último bit que lo ha arreglado :) – Designer023

0

affer pocos días la investigación y el experimento utilizando toda la solución en Internet, por fin llego a tener combinar de esta

Cambiar la cabeza de su página:

<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"> 

aquí la cocde poner esto en la que desea botón likeit es:

<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> 

de crédito Wellcome: http://www.xaluan.com

0

El Canal truco no funcionó para mí. Así que sólo añade por encima de todos los demás contenidos en mi archivo PHP un código que redirecciones 301 a la URL sin la adición 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

Resuelto con el iframe como botón.

1

Utilicé el enfoque dentro de la secuencia de comandos para definir channelUrl a una página en mi sitio, pero todavía recibí múltiples visitas a esa página.

Después de ver el tráfico resultante con WireShark, noté que (Facebook) usan un canalUrl para algunas de sus propias llamadas internas, pasando también fb_xd_fragment - En su lugar usé esa URL para el channelUrl, redirigiéndola fuera de mi sitio.

Tengo varios botones Me gusta en mi sitio usando fbml en lugar de marcos, y en IE7, ya no recibo un golpe de Facebook con el parámetro fb_xd_fragment.

No estoy seguro de si esto es una buena práctica, pero parece que funciona.

que establece este valor para el channelUrl:

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

Espero que esto ayude.

Cuestiones relacionadas