javascript - plusone - google+ widget
Devolución de llamada del botón Google Plus One: ¿Hay alguna forma de ''suscribirse'' a la acción+1? (5)
Estoy buscando una forma de suscribirme al botón más uno.
De acuerdo con la documentación aquí: https://developers.google.com/+/plugins/+1button/#plusonetag-parameters Podría agregar un atributo de devolución de llamada a la etiqueta, pero en mi caso no puedo interferir. Estoy construyendo una herramienta en la parte superior del sitio, un JS incorporado activado en el documento listo. Quiero agregar la devolución de llamada en vivo, y no debe interferir la devolución de llamada original si se declaró una.
No tengo este problema con Facebook o Twitter (me gusta y tweet, por ejemplo) . En estos casos están las variables globales FB y twttr, registradas como una vez que están disponibles:
FB.Event.subscribe("edge.create", function(e) {
console.log(e);
})
o twttr.events.bind ...
de twitter twttr.events.bind ...
¿Me estoy perdiendo algo o Google está eligiendo una manera muy extraña de hacer las cosas? ¿Cuál es su interés en este método y qué se puede hacer a su alrededor?
Para suscribirse a un evento de Google Plus, puede destruir el botón y reconstruirlo:
$(''#gPlusContainer'').html("<div id=''gPlusBtn''></div>");
gapi.plusone.render("gPlusBtn", {
"callback": plus_Puzzle,
"size": "tall"
});
Podría ir más allá de la respuesta de Daves, e incluso inyectar su propia devolución de llamada, pero tome el paso adicional de recuperar el valor de devolución de llamada existente de antemano y enviarlo usted mismo dentro de su propio manejador (si existe un valor de devolución de llamada existente) con los mismos valores que su devolución de llamada recibida.
De esa manera, se llamará tanto a su manejador como al manejador original, y espero que nadie sea más sabio :)
Puede utilizar la API de JavaScript para recuperar la devolución de llamada +1.
gapi.plusone.render(
myDomNode,
{ "callback": myCallbackFunction });
O también puede especificar el atributo "callback"
si está utilizando la versión DOM.
En cualquier caso, la devolución de llamada se invocará con un objeto que tiene dos propiedades: href
devuelve la URL que fue + 1''d, y el state
es "off"
o "on"
.
Se puede hacer fácilmente de forma asíncrona:
<!-- add the callback to your html as data-attribute: -->
<div class="g-plusone" data-callback="plusOneClick" data-annotation="inline" data-width="300"></div>
en su JS debe definir una función de devolución de llamada y ejecutar la carga asíncrona
// define your callback function
function plusOneClick(response) {
...
}
// load your google+ stuff async
(function() {
var po = document.createElement(''script''); po.type = ''text/javascript''; po.async = true;
po.src = ''https://apis.google.com/js/plusone.js'';
var s = document.getElementsByTagName(''script'')[0]; s.parentNode.insertBefore(po, s);
})();
Una solución agresiva pero generalmente viable sería reemplazar el atributo de devolución de llamada de la etiqueta G: PLUSONE con su propia función, que puede llamar a la devolución de llamada original (si se definió una) y hacer sus propias cosas, también. El script plusone.js de Google reemplaza la etiqueta G: PLUSONE con un iframe, por lo que esto debe hacerse antes de que se ejecute este script (probablemente con un enlace listo para DOM). Este es un ejemplo ingenuo (que puede ver trabajando en jsfiddle : abra una consola de depuración y haga clic en el botón +1).
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script>
var originalCallback = function(o) {
console.log(''original callback - '' + o.state);
};
// on DOM ready
$(function() {
var plusoneTag = $(''G//:PLUSONE'');
var originalCallbackName = $(plusoneTag).attr(''callback'');
// global function
hijackerCallback = function(o) {
console.log(''hijacking callback - '' + o.state);
window[originalCallbackName](o);
};
plusoneTag.attr(''callback'', ''hijackerCallback'');
});
</script>
<script type="text/javascript" src="https://apis.google.com/js/plusone.js"></script>
... persume que en algún lugar de la página del host tiene la etiqueta +1, así:
<g:plusone annotation="inline" callback="originalCallback"></g:plusone>
Como nota al margen, he intentado escuchar la eliminación de la etiqueta G: PLUSONE usando DOMNodeRemoved y reemplazar la devolución de llamada en ese momento, pero eso es demasiado tarde y el script plusone.js ya está vinculado a la devolución de llamada original en esta etapa. En el mundo real, probablemente deberías intentar inyectar tu script justo antes de plusone.js (probablemente estamos hablando de una extensión de Chrome o Firefox aquí).