Проблема Загрузка виджета Google +1 Асинхронно
У меня есть несколько виджетов на сайте, который я разрабатываю, и я загружаю их все асинхронно из файла javascript, чтобы он не удерживал DOM от завершения.
Например, я делаю это с помощью виджетов Digg и Buzz, и это отлично работает:
// Buzz Share
function buzzShare() {
$jQ('.sharebox').append('<div class="widget"><a title="Post to Google Buzz" class="google-buzz-button" href="http://www.google.com/buzz/post" data-button-style="normal-count"></a></div>');
$jQ.getScript('http://www.google.com/buzz/api/button.js');
}
// Digg Share
function diggShare() {
$jQ('.sharebox').append('<div class="widget"><a class="DiggThisButton DiggMedium"></a></div>');
$jQ.getScript('http://widgets.digg.com/buttons.js');
}
Когда дело доходит до нового виджета Google +1, та же логика не работает:
// PlusOne Share
function plusOneShare() {
$jQ.getScript('http://apis.google.com/js/plusone.js');
$jQ('.sharebox').append('<div class="widget"><div class="g-plusone" data-size="tall" data-count="true"></div></div>');
}
Я попытался использовать тег HTML5 и <g:plusone></g:plusone>
, Ни одна из них не работает.
Вот документация для только что запущенного сервиса: http://code.google.com/apis/+1button/
Я также заметил, что вы можете сделать следующее, если встраиваете скрипт прямо в HTML.
<script type="text/javascript" src="https://apis.google.com/js/plusone.js">
{"parsetags": "explicit"}
</script>
Есть ли способ использовать {"parsetags": "explicit"}
параметры с помощью jQuery .getScript
?
PS Я также пробовал переключаться между первой и второй строками в функции plusOneShare, которая тоже не работала.
Спасибо!
7 ответов
Метод, который я описал в моем вопросе, работает отлично. На моей стороне Google была просто какая-то ошибка, если я прав. Я пытался заставить функцию работать через несколько часов после того, как они объявили об этом. Примерно через два дня все работает отлично.
.getScript
Метод - это хороший способ загрузить +1 через AJAX.
Другое решение для асинхронной загрузки. У меня отлично работает, особенно если вы используете php и хотите динамически назначать язык.
<script type="text/javascript">
window.___gcfg = {
<? if ($lang!= 'en'){ ?>
lang: '<?=$lang?>',
<? } ?>
parsetags: 'explicit',
annotation: 'inline',
size: 'medium'
};
$(document).ready(function() {
$.getScript('https://apis.google.com/js/plusone.js',function(){
gapi.plusone.render("plusone-div");
});
});
</script>
Как показано на http://code.google.com/intl/pt-BR/apis/+1button/
Вы можете сделать явную загрузку, используя
$(document).ready(function() { gapi.plusone.go('content'); });
Я закончил тем, что делал что-то вроде этого для поддержки передачи параметров в скрипт +1:
var hd = document.getElementsByTagName('head')[0];
var scr = document.createElement('script');
scr.type ='text/javascript';
scr.async = true;
scr.innerHTML = "{lang: 'es-419'}"; // Magic! :)
scr.src = "https://apis.google.com/js/plusone.js";
hd.appendChild(scr);
Какой браузер вы используете? Следующий пример полной страницы работает для меня:
<html>
<head>
<title>jQuery Dynamic load test</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$.getScript('https://apis.google.com/js/plusone.js');
$('.sharebox').append('<div class="widget"><div class="g-plusone" data-size="tall" data-count="true"></div></div>');
});
</script>
</head>
<body>
Hello world!
<div class="sharebox"></div>
</body>
</html>
Если вы используете getScript (или любой другой метод асинхронной загрузки), вы получите пустую страницу в неподдерживаемых браузерах. plusone.js заменяет всю вашу страницу на iphone/ipad/android и т. д.
Я также ищу решение, чтобы иметь возможность использовать "parsetags: " явный "" с getScript..
Теперь я также провел некоторые исследования по этому вопросу - и я люблю $.getScript - (не жутко, а только потому, что это ускоряет первоначальное отображение всех моих страниц). Если вы когда-либо создавали веб-сайт, содержащий ссылки на Twitter, Facebook, Plusone, OpenX и т. Д., Вы знаете, о чем я говорю:)
В любом случае, я недавно выяснил, что "plusone.js" может быть загружен асинхронно (с использованием jQuery $.getScript) и в то же время может быть задан язык определенного языка:
<script type="text/javascript">
window.___gcfg = { lang: 'sv-SE' };
$(document).ready(function() {
$.getScript("https://apis.google.com/js/plusone.js");
});
</script>
<body>
<g:plusone size="medium"></g:plusone>
</body>
Надеюсь, это кому-нибудь поможет:)