动态附加google plus按钮的回调参数

时间:2013-12-27 07:49:44

标签: javascript google-plus

我有一个带正常代码的Google +按钮

<g:plusone size="tall" callback="plusone_vote" href="http://example.com"></g:plusone>

我有一个功能

function plusone_vote(gpovote) {

               var gpoaction = 'Google +1 Vote';
               if (gpovote.state=='off')
                {  
                  console.log("unlike");
               }else{
                  console.log("like");
               }
               var href = gpovote.href;
}

直到现在,情况还算不错。每当发生gplus点击时,console.log都能正常运行。

但是,当我这样做时

<g:plusone size="tall" href="http://example.com"></g:plusone>

然后附上&#34;回调&#34;属性如下(在document.load之后)

var gplus_event = document.getElementsByTagName("g:plusone");
       if(gplus_event!=null)
       {
               console.log(gplus_event);
               var x = document.getElementsByTagName("g:plusone");
               x[0].setAttribute('callback', 'plusone_vote');
               console.log(gplus_event);

       }

使用if(gplus_event!= null)块中的两个console.log,显示&#34;回调&#34;属性随附标记。但即使在那之后,回调函数也没有被调用。

有什么线索我错过了什么?它甚至像这样工作?

任何线索都会很棒

由于

2 个答案:

答案 0 :(得分:2)

可以这样工作:

<g:plusone size="tall" href="http://example.com"></g:plusone>

和js

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);
var gplus_event = document.getElementsByTagName("g:plusone");
if(gplus_event!=null)
{
     console.log(gplus_event);
     var x = document.getElementsByTagName("g:plusone");
     x[0].setAttribute('callback', 'plusone_vote');
     console.log(gplus_event);    
}
function plusone_vote(par) {
    alert(par.state);
}

Deno :: jsfiddle

答案 1 :(得分:1)

Sudhir的答案是有效的,因为恰好有足够的延迟加载脚本,但不能保证在所有情况下都可以工作,或者可能在缓存的好处发挥作用时。

plusone.js文件正在解析页面并在执行代码之前渲染/转换元素,因此您的回调添加得太晚了。您需要确保在此元素渲染之前附加回调。您可以通过几种方法完成此操作。

  1. Use explicit rendering of tags.然后致电gapi.plusone.render(elementId)gapi.plusone.go(container),告知API您已准备好使用这些按钮。
  2. 代码执行完毕后
  3. Load the Google+ JavaScript asynchronously
  4. 完全动态创建+1按钮,并在准备转换时调用gapi.plusone.render(elementId)gapi.plusone.go(container)