我有一个带正常代码的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;属性随附标记。但即使在那之后,回调函数也没有被调用。
有什么线索我错过了什么?它甚至像这样工作?
任何线索都会很棒
由于
答案 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
文件正在解析页面并在执行代码之前渲染/转换元素,因此您的回调添加得太晚了。您需要确保在此元素渲染之前附加回调。您可以通过几种方法完成此操作。
gapi.plusone.render(elementId)
或gapi.plusone.go(container)
,告知API您已准备好使用这些按钮。gapi.plusone.render(elementId)
或gapi.plusone.go(container)
。