Подтвердить что ты не робот

Повторный вызов Google Plus One - любой способ "подписаться" на действие +1?

Я ищу способ подписаться на кнопку "плюс один".

В соответствии с документацией здесь: https://developers.google.com/+/plugins/+1button/#plusonetag-parameters Я могу добавить атрибут callback к тегу, но в моем случае мне не разрешают вмешиваться. Я создаю инструмент ontop сайта, встроенный JS запускается на готовом документе. Я хочу добавить обратный вызов в прямом эфире, и он не должен вмешиваться в исходный обратный вызов, если он был объявлен.

У меня нет этой проблемы с Facebook или Twitter (например, и твит, например). В этих случаях есть глобальные переменные FB и twttr, зарегистрированные так же, как только они доступны:

FB.Event.subscribe("edge.create", function(e) {
  console.log(e);
})

или твиттер twttr.events.bind ...

Я что-то упускаю, или Google выбирает очень неудобный способ сделать что-то? Какова их заинтересованность в этом методе и что можно сделать вокруг него?

4b9b3361

Ответ 1

Вы можете использовать API JavaScript для получения обратного вызова +1.

gapi.plusone.render(
    myDomNode,
    { "callback": myCallbackFunction });

Или вы также можете указать атрибут "callback", если используете версию DOM.

В любом случае обратный вызов будет вызван с объектом, который имеет два свойства: href возвращает URL-адрес, который был + 1'd, а state - либо "off", либо "on".

Ответ 2

Вы можете пойти дальше, чем Дэйвс, и действительно ввести свой собственный обратный вызов, - но сделайте дополнительный шаг для предварительного извлечения существующего значения обратного вызова и отправьте его самостоятельно в свой собственный обработчик (если есть существующее значение обратного вызова) с помощью те же значения, что и ваш обратный вызов.

Таким образом будет вызван как ваш обработчик, так и исходный обработчик, и, надеюсь, никто не станет мудрым:)

Ответ 3

Агрессивным, но обычно выполнимым решением было бы заменить атрибут обратного вызова тега G: PLUSONE своей собственной функцией, которая может вызывать исходный обратный вызов (если он был определен) и делать свои собственные вещи. Google plusone.js script заменяет тег G: PLUSONE на iframe, поэтому это нужно сделать до того, как этот script выполнит (возможно, с помощью DOM-ready hook). Здесь наивный пример (который вы можете видеть в 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 script уже привязан к исходному обратному вызову на данном этапе. В реальном мире вы, вероятно, должны попробовать ввести ваш script перед сайтом plusone.js(мы, вероятно, говорим о расширении Chrome или Firefox здесь).

Ответ 4

его можно легко выполнить асинхронно:

<!-- add the callback to your html as data-attribute: -->
<div class="g-plusone" data-callback="plusOneClick" data-annotation="inline" data-width="300"></div>

в вашем JS вам необходимо определить функцию обратного вызова и выполнить асинхронную загрузку

// 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);
})();

Ответ 5

Чтобы подписаться на событие google plus, вы можете уничтожить кнопку и перестроить ее:

$('#gPlusContainer').html("<div id='gPlusBtn'></div>");
gapi.plusone.render("gPlusBtn", {
    "callback": plus_Puzzle,
    "size": "tall"
});