Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 谷歌加一个按钮的回调-任何方式';订阅';到+;1行动?_Javascript_Jquery_Google Plus One - Fatal编程技术网

Javascript 谷歌加一个按钮的回调-任何方式';订阅';到+;1行动?

Javascript 谷歌加一个按钮的回调-任何方式';订阅';到+;1行动?,javascript,jquery,google-plus-one,Javascript,Jquery,Google Plus One,我正在寻找订阅plus one按钮的方法 根据此处的文档: 我可以向标记添加回调属性,但在我的情况下,我不允许干预。我正在网站上构建一个工具,一个在文档就绪时触发的嵌入式JS。 我想添加实时回调,如果声明了回调,则它不得干扰原始回调 我在Facebook或Twitter上没有这个问题(比如,像和tweet)。在这些情况下,有FB和twttr全局变量,一旦可用,就这样注册: FB.Event.subscribe("edge.create", function(e) { console.log(

我正在寻找订阅plus one按钮的方法

根据此处的文档: 我可以向标记添加回调属性,但在我的情况下,我不允许干预。我正在网站上构建一个工具,一个在文档就绪时触发的嵌入式JS。 我想添加实时回调,如果声明了回调,则它不得干扰原始回调

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

FB.Event.subscribe("edge.create", function(e) {
  console.log(e);
})
或者twitter的
twttr.events.bind…

我是不是遗漏了什么,还是谷歌选择了一种非常尴尬的方式?他们对这个方法感兴趣的是什么?可以围绕它做些什么?

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

gapi.plusone.render(
    myDomNode,
    { "callback": myCallbackFunction });
或者,如果使用的是DOM版本,也可以指定
“callback”
属性


在任何一种情况下,都将使用具有两个属性的对象调用回调:
href
返回+1'd的URL,
状态
“off”
“on”

您可以比Daves answer更进一步,并且确实注入您自己的回调-但是要采取额外的步骤,事先检索现有回调值,并在您自己的处理程序中(如果存在现有回调值)使用与您收到的回调相同的值分派它


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

一个积极但通常可行的解决方案是用您自己的函数替换G:PLUSONE标记的callback属性,该函数可以调用原始回调(如果定义了回调)并执行自己的操作。Google的plusone.js脚本用iframe替换了G:plusone标记,因此这必须在该脚本执行之前完成(可能使用一个DOM就绪挂钩)。下面是一个简单的示例(您可以打开调试控制台并单击+1按钮)


var originalCallback=函数(o){
log('原始回调-'+o.state);
};
//关于DOM ready
$(函数(){
var plusoneTag=$('G\\:PLUSONE');
var originalCallbackName=$(plusoneTag.attr('callback');
//全局函数
劫持回调=函数(o){
log('劫持回调-'+o.state);
窗口[原始CallbackName](o);
};
plusoneTag.attr('callback','jackercallback');
});

…假定在主机页的某个地方有+1标记,如下所示:

<g:plusone annotation="inline" callback="originalCallback"></g:plusone>


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

可以轻松地异步完成:

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

要订阅google plus活动,您可以销毁按钮并重建它:

$('#gPlusContainer').html("<div id='gPlusBtn'></div>");
gapi.plusone.render("gPlusBtn", {
    "callback": plus_Puzzle,
    "size": "tall"
});
$('#gPlusContainer').html(“”);
gapi.plusone.render(“gPlusBtn”{
“回调”:加上谜题,
“尺寸”:“高”
});

谢谢!但是,如果存在回调,它会干扰原始回调。我还需要加上我的。这就是为什么我给出了fb的“订阅”示例。Moo,您将如何检索现有回调?
按钮被移除,一个iframe被插入到它的位置。我没有看Google是如何做他们的+1按钮的,但它肯定必须以某种方式以与该iframe相关的方式传递回Google服务器,因此它可能在某个URL中。谢谢。我需要对此进行测试,但如果我的脚本异步加载,它仍然无法工作。谢谢,非常好的响应!尽管如此,我还是想知道是否有可能异步完成这项工作,这也是我的应用程序的一部分。有什么想法吗?我不认为你能可靠地异步实现这一点,当然不能以可靠的方式。在加载并执行plusone.js脚本之前,您必须至少同步执行一个步骤:或者我上面描述的,或者-或者-将plusone.js脚本标记的parsetags属性更改为“explicit”(请参阅)。这将防止自动呈现+1标记,因此您可以在空闲时异步链接回调并使用gapi.plusone.render()或gapi.plusone.go()呈现按钮。这里的用例是什么。网站所有者会故意使用你的脚本吗?如果/当他已经在使用某个+1按钮的回调时,也许他可以提供信息?
// 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);
})();
$('#gPlusContainer').html("<div id='gPlusBtn'></div>");
gapi.plusone.render("gPlusBtn", {
    "callback": plus_Puzzle,
    "size": "tall"
});