我正在寻找一种订阅加号按钮的方法。
根据此处的文档: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 ...
我是否遗漏了任何内容,或者谷歌选择了一种非常尴尬的做事方式?他们对这种方法有什么兴趣,可以围绕它做些什么?
答案 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"
});