2011-06-01 10 views

Respuesta

4

Parece que el twttr.TweetButton constructor no fue apoyada, y ahora ya no funciona después de la última actualización de la API:

El método admitido es crear un botón de Tweet basado en iframe dinámicamente:

Aunque nota @Runningskull’s answer para obtener información actualizada.

0

Pruebe la biblioteca de @Anywhere. código de ejemplo JS:

twttr.anywhere(function (T) { 
     T("#tweetbox").tweetBox({ 
     counter: false, 
     defaultContent: "Default text in a Tweet box...", 
     label: "Share this page on Twitter" 
}); 
+0

He buscado en @Anywhere, pero necesito usar el botón Tweet y no el cuadro Tweet. –

45

Encontré la respuesta en el web. La idea es volver a solicitar el archivo javascript de Twitter. Como está almacenado en caché, no hay gastos generales de descarga.

$.ajax({ url: 'http://platform.twitter.com/widgets.js', dataType: 'script', cache:true}); 
+0

Funciona bien. Primero, me preocupaba que obtuviera múltiples scripts con conflictos y sobrecarga, ¡pero parece que jQuery maneja eso! – snobojohan

+0

¿y si tengo muchos botones de Twitter en mi página? ¿Cómo puedo volver a procesar solo uno (por ejemplo, el que está dentro de un div con id) –

+0

@MartinSchaer No creo que se pueda con este método. Necesitarás confiar en el método basado en iframe o en otra cosa. – Aurimas

1

En primer lugar, asegúrese de que tiene jQuery incluye en la cabeza de su documento:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 

A continuación, cree un vínculo que tiene la misma URL que el botón Tweet eventual, junto con un div vacío donde el botón se representará:

<a href="http://www.my-site-to-tweet-about.com" id="tlink"></a> 
<div id="tbutton"></div> 

En la parte inferior de la página, justo encima de la etiqueta/cuerpo, incluir el código JavaScript de Twitter y la función que hará que el botón, así como el oyente que activará la función cuando el evento deseado se lleva a cabo:

<script type="text/javascript"> 
//async script, twitter button fashiolista.com style 
    (function() { 
    var s = document.createElement('SCRIPT'); 
    var c = document.getElementsByTagName('script')[0]; 
    s.type = 'text/javascript'; 
    s.defer = "defer"; 
    s.async = true; 
    s.src = 'http://platform.twitter.com/widgets.js'; 
    c.parentNode.insertBefore(s, c); 
    })(); 

function renderTweetButton(tbutton,tlink){ 
    var href = $("#"+tlink).attr('href'), 
     $target = $("#"+tbutton), 
     qstring = $.param({ url: href, count: "vertical" }), 
     toinsert = '<iframe allowtransparency="true" frameborder="0" scrolling="no" src="http://platform.twitter.com/widgets/tweet_button.html?'+qstring+'" style="width:57px; height:70px;"></iframe>'; 
    $target.html(toinsert); 
} 

$("#hoverlink").mouseenter(function() { 
    renderTweetButton("tbutton","tlink"); 
}); 
</script> 

Por último, añadir un enlace a su página en alguna parte que se activará la función anterior en base a algún evento:

<a href="#" id="hoverlink">Hover here to render a tweet button to div#tbutton.</a> 

Eso es todo.

Si desea toda la página HTML de prueba para ver cómo lo tengo trabajo, ver aquí:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<title>jQuery Twitter Button Render Test</title> 

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 

</head> 

<body> 

<a href="http://www.my-site-to-tweet-about.com" id="tlink"></a> 
<div id="tbutton"></div> 

<a href="#" id="hoverlink">Hover here to render a tweet button to div#tbutton.</a> 


<script type="text/javascript"> 
//async script, twitter button fashiolista.com style 
    (function() { 
    var s = document.createElement('SCRIPT'); 
    var c = document.getElementsByTagName('script')[0]; 
    s.type = 'text/javascript'; 
    s.defer = "defer"; 
    s.async = true; 
    s.src = 'http://platform.twitter.com/widgets.js'; 
    c.parentNode.insertBefore(s, c); 
    })(); 

function renderTweetButton(tbutton,tlink){ 
    var href = $("#"+tlink).attr('href'), 
     $target = $("#"+tbutton), 
     qstring = $.param({ url: href, count: "vertical" }), 
     toinsert = '<iframe allowtransparency="true" frameborder="0" scrolling="no" src="http://platform.twitter.com/widgets/tweet_button.html?'+qstring+'" style="width:57px; height:70px;"></iframe>'; 
    $target.html(toinsert); 
} 

$("#hoverlink").mouseenter(function() { 
    renderTweetButton("tbutton","tlink"); 
}); 

</script> 

</body> 
</html> 
23

Para cualquiera tropezar con esto, hay una nueva manera, más fácil de hacerlo (a partir de 5/28/12 si no antes). Un vistazo rápido no lo encontró en la documentación, pero puede hacer twttr.widgets.load(). Eso recargará todos los widgets en la página.

EDITAR: Está documentado, después de todo.Confirmar la sección 'Optimización' this page 's (que no se puede vincular directamente a)

+0

Esta es definitivamente la respuesta actual. Agregar twttr.widgets.load() actualizará todo el contenido de Twitter para div creado después de que se cargue el guión de twitter. ¡Muchas gracias! – knutole

+0

Trabajando en una aplicación de Rails. Esta solución funcionó. –

1

yo sólo tenía el mismo problema, esto funciona en jQuery:

$.getScript('http://platform.twitter.com/widgets.js'); 
10

sólo tiene que llamar twttr.widgets.load() después de su llamada ajax no es necesario volver a cargar una secuencia de comandos que ya está cargada.

Cuestiones relacionadas