2011-06-01 19 views
5

Ho alcuni widget sul sito che sto sviluppando e li carico tutti in modo asincrono da un file javascript in modo che non tenga il DOM dalla finitura.Problema Caricamento di Google +1 Widget in modo asincrono

Per esempio, lo faccio con i widget Digg e Buzz e funziona benissimo:

// Buzz Share 
function buzzShare() { 
    $jQ('.sharebox').append('<div class="widget"><a title="Post to Google Buzz" class="google-buzz-button" href="http://www.google.com/buzz/post" data-button-style="normal-count"></a></div>'); 
    $jQ.getScript('http://www.google.com/buzz/api/button.js'); 
} 
// Digg Share 
function diggShare() { 
    $jQ('.sharebox').append('<div class="widget"><a class="DiggThisButton DiggMedium"></a></div>'); 
    $jQ.getScript('http://widgets.digg.com/buttons.js'); 
} 

Quando si tratta del nuovo widget Google +1, la stessa logica non funziona:

Ho provato a utilizzare sia il tag HTML5 che lo <g:plusone></g:plusone>. Né lavoro.

Ecco la documentazione per il servizio appena lanciato: http://code.google.com/apis/+1button/

Ho anche notato che si può fare quanto segue se incorporare lo script direttamente nel codice HTML.

<script type="text/javascript" src="https://apis.google.com/js/plusone.js"> 
     {"parsetags": "explicit"} 
    </script> 

C'è un modo per utilizzare i parametri {"parsetags": "explicit"} con jQuery .getScript?

P.S. Ho anche provato a cambiare la prima e la seconda riga all'interno della funzione plusOneShare, che non ha funzionato neanche.

Grazie!

risposta

1

Il metodo Ho descritto nella mia domanda funziona perfettamente. C'era solo una specie di bug sulla fine di Google se ho ragione. Stavo cercando di far funzionare la funzione solo poche ore dopo averlo annunciato. Circa due giorni dopo, ora funziona perfettamente.

Il metodo .getScript è un buon modo per caricare il +1 tramite AJAX.

+0

Qualche parola su come passare i parametri ad esso? Sto provando a passare {"lang": "es-419"} ma non sono riuscito a trovare ancora. – Danita

+0

Nessun indizio. Sono stato fortunato perché le impostazioni predefinite erano quelle che volevo. Ti farò sapere se trovo una soluzione per questo. –

+1

Ho capito. Vedi la mia risposta qui sotto. – Danita

2

Che browser stai utilizzando? L'esempio che segue a piena pagina funziona per me:

<html> 
    <head> 
    <title>jQuery Dynamic load test</title> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script> 
    <script type="text/javascript"> 
     $(document).ready(function() { 
     $.getScript('https://apis.google.com/js/plusone.js'); 
     $('.sharebox').append('<div class="widget"><div class="g-plusone" data-size="tall" data-count="true"></div></div>'); 
     }); 
    </script> 
    </head> 
    <body> 
    Hello world! 
    <div class="sharebox"></div> 
    </body> 
</html> 
+0

Buone notizie. Il mio codice ha iniziato a funzionare perfettamente circa un giorno o due dopo. Non ho cambiato idea, infatti ho rinunciato a provare e ho appena lasciato se è come dopo questo thread. Penso che Google stia ancora spingendo fuori le modifiche per +1 durante quel periodo. Dopotutto, l'intero servizio ha solo pochi giorni. –

1

Se si utilizza getScript (o qualsiasi metodo di caricamento asincrono), si finisce con una pagina vuota su browser non supportati. plusone.js sostituisce tutta la vostra pagina su iPhone/iPad/Android ecc ..

Sono anche alla ricerca di una soluzione per essere in grado di utilizzare 'parsetags: 'esplicita'' con getScript ..

+1

OK, a quanto pare Google ha risolto il problema. – levent

2

ho finito per fare qualcosa di simile per supportare parametri passando al +1 script:

var hd = document.getElementsByTagName('head')[0]; 
var scr = document.createElement('script'); 
scr.type ='text/javascript'; 
scr.async = true; 
scr.innerHTML = "{lang: 'es-419'}"; // Magic! :) 
scr.src = "https://apis.google.com/js/plusone.js"; 
hd.appendChild(scr); 
1

Ora, ho anche fatto qualche ricerca su questo - e I LOVE $ .getScript - (non in un modo raccapricciante, ma solo perché accelera la visualizzazione iniziale di tutta la mia pagina S). Se hai mai creato un sito web che contiene riferimenti a Twitter, Facebook, Plusone, OpenX, ecc., Sai di cosa sto parlando :)

In ogni caso, quello che ho scoperto di recente è che "plusone.js" può essere caricato async (usando jQuery $.getScript) e allo stesso tempo essere istruiti a usare un certo linguaggio:

<script type="text/javascript"> 
    window.___gcfg = { lang: 'sv-SE' }; 
    $(document).ready(function() { 
    $.getScript("https://apis.google.com/js/plusone.js"); 
    }); 
</script> 

<body> 
    <g:plusone size="medium"></g:plusone> 
</body> 

Spero che questo aiuti chiunque :)

+0

Grazie. Questa è un'ottima soluzione. – kushin

2

Un'altra soluzione per asincrona carico. Funziona perfettamente per me, soprattutto se stai usando php e vuoi assegnare dinamicamente la lingua.

<script type="text/javascript"> 
    window.___gcfg = { 
<? if ($lang!= 'en'){ ?> 
    lang: '<?=$lang?>', 
<? } ?> 
    parsetags: 'explicit', 
    annotation: 'inline', 
    size: 'medium' 
    }; 
    $(document).ready(function() { 
     $.getScript('https://apis.google.com/js/plusone.js',function(){ 
      gapi.plusone.render("plusone-div"); 
     }); 
    }); 
</script> 
Problemi correlati