Агрессивным, но обычно работоспособным решением было бы заменить атрибут обратного вызова тега G: PLUSONE вашей собственной функцией, которая может вызывать исходный обратный вызов (если он был определен) и также выполнять свои собственные функции.Сценарий Google plusone.js заменяет тег G: PLUSONE на iframe, поэтому это нужно сделать до того, как этот сценарий будет выполнен (возможно, с помощью DOM-ready).Вот наивный пример (который вы можете увидеть, работая с jsfiddle - откройте консоль отладки и нажмите кнопку +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>
...предположим, что где-то на странице хоста у вас есть тег +1, например:
<g:plusone annotation="inline" callback="originalCallback"></g:plusone>
В качестве примечания я попытался прослушать удаление тега G: PLUSONE с помощью DOMNodeRemoved и заменитьобратный вызов тогда - но это слишком поздно, и сценарий plusone.js уже связан с исходным обратным вызовом на этом этапе.В реальном мире вам, вероятно, следует попробовать внедрить ваш скрипт непосредственно перед plusone.js (мы, вероятно, говорим здесь о расширении Chrome или Firefox).