Google Plus一键回拨 - 任何“订阅”+1操作的方式?

时间:2012-03-07 03:26:50

标签: javascript jquery google-plus-one

我正在寻找一种订阅加号按钮的方法。

根据此处的文档:https://developers.google.com/+/plugins/+1button/#plusonetag-parameters 我可以为标记添加一个回调属性,但在我的情况下,我不允许干涉。我正在构建一个站点上的工具,一个嵌入式JS在文档就绪时触发。 我想实时添加回调,如果声明了回调,它不得干扰原始回调。

我没有Facebook或Twitter (例如和推文)这个问题。在这些情况下,有FB和twttr全局变量,一旦可用就这样注册:

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

或twitter的twttr.events.bind ...

我是否遗漏了任何内容,或者谷歌选择了一种非常尴尬的做事方式?他们对这种方法有什么兴趣,可以围绕它做些什么?

5 个答案:

答案 0 :(得分:14)

您可以使用JavaScript API来检索+1回调。

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

或者,如果您使用的是DOM版本,则可以指定"callback"属性。

在任何一种情况下,都会使用包含两个属性的对象调用回调:href返回+ 1的URL,state"off"或{ {1}}。

答案 1 :(得分:4)

你可以比Daves回答更进一步,并确实注入你自己的回调 - 但是要采取额外的步骤,事先检索现有的回调值,并在你自己的处理程序中自己调度它(如果有一个现有的回调值)与收到的回调值相同。

这样你的处理程序和原始处理程序都会被调用,希望没有人会更聪明:)

答案 2 :(得分:3)

一个积极但通常可行的解决方案是将G:PLUSONE标记的回调属性替换为您自己的函数,该函数可以调用原始回调(如果已定义)并执行自己的操作。 Google的plusone.js脚本用iframe替换G:PLUSONE标记,因此必须在此脚本执行之前完成(可能使用DOM-ready挂钩)。这是一个简单的例子(您可以see working on 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>

作为旁注,我试图使用DOMNodeRemoved监听G:PLUSONE标记的删除,然后替换回调 - 但是为时已晚,plusone.js脚本已绑定到此处的原始回调阶段。在现实世界中,您应该尝试在plusone.js之前注入脚本(我们可能在这里讨论Chrome或Firefox扩展)。

答案 3 :(得分:1)

可以很容易地异步完成:

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

答案 4 :(得分:0)

要订阅google plus事件,您可以销毁该按钮并重建它:

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