Создатели социальной сети ВКонтакте с целью популяризации своего сервиса реализовали во-первых, возможность комментирования различных материалов на сайте с использованием их сети, а во-вторых поддержку отображения упомянутых комментариев на любом сайте. И, к слову сказать, каждый современный веб-разработчик не может не осозновать важность интеграции своего сайта с социальными сетями, даже если не "сидит" в них. Хотя мне, честно говоря, непонятно, как он будет связывать сайт и социальные сети, не регистрируясь в них... но я отвлекся от темы. Итак, довольно распространённая ситуация: Вы сперва реализовали комментирование новостей сайта через VKontakte, а затем уставновили виджет комментариев ВКонтакте по инструкции, а он не работает... то есть Вы точно знаете что комментарии есть, но в виджете пусто!
Итак, о чем говорит
В тег на странице Вашего добавляете следующий код:
2. В тело страницы сайта встраивается следующий код:
VK.init({
apiId: ВАШ_API_ID,
onlyWidgets: true
});
</script>
3. Также в тело страницы необходимо добавить элемент DIV, в котором будут отображаться комментарии, задать ему уникальный id и добавить в него код инициализации виджета. Например:
<script type="text/javascript">
VK.Widgets.Comments('vk_comments');
</script>
<script type="text/javascript">
window.onload = function () {
VK.init({apiId: 111, onlyWidgets: true});
VK.Widgets.Comments('vk_comments', {width: 500, limit: 15}, 321);
}
</script>
Так вот с одной такой проблемой я уже столкнулся при использовании модуля Docman jDMTree в статье Исправляем ошибку в модуле Docman jDMTree, речь в ней шла о том, что при наличии модуля на странице он "единовластно" перехватывает события, которые могли бы произойти после загрузки страницы, т.е. событие window.onload и заменяет их своим.
Здесь собственно говоря та же ситуация. Во-первых виджет VK перехватывает событие onload и если этот скрипт был загружен последним, то он "никому его не отдаст", а в некоторых случаях ему "тупо" может "не отдать это событие" другой обработчик, который загрузится после него.
Во втором случае мы будем наблюдать картину пустых комментариев в том месте, где они должны были быть.
Чтобы этого избежать, последний код предлагается заменить на другой:
function VKInit() {
VK.init({apiId: 111, onlyWidgets: true});
VK.Widgets.Comments('vk_comments', {width: 500, limit: 15}, 321);
}
if (window.addEventListener) {
window.addEventListener("load",VKInit,false);
} else if (window.attachEvent) {
window.attachEvent("onload",VKInit);
} else { window.onload = function() {
VKInit();
}
}
</script>
На одном из своих сайтов под Jooomla 1.7 я использую модуль последних комментариев от команды
window.onload = function () {
VK.init({apiId: <?=$api_id ?>, onlyWidgets: true});
VK.Widgets.CommentsBrowse('mod_jlvkcomments', {width: <?=$width?>, limit: <?=$limit?>, mini: 0, height: <?=$height?>});
}
</script>
Так вот на одном сайте этот модуль отказался что-либо показывать... в комментариях было пусто. И только когда я заменил этот код на другой:
function VKInit() {
VK.init({apiId: <?=$api_id ?>, onlyWidgets: true});
VK.Widgets.CommentsBrowse('mod_jlvkcomments', {width: <?=$width?>, limit: <?=$limit?>, mini: 0, height: <?=$height?>});
}
if (window.addEventListener) {
window.addEventListener("load",VKInit,false);
} else if (window.attachEvent) {
window.attachEvent("onload",VKInit);
} else { window.onload = function() {
VKInit();
}
}
</script>
Всё заработало.
Удачных Вам проектов!
Comments
я также использую модуль последних комментариев от команды JoomLine)
______________________________________
Время - самое драгоценное из всех сокровищ.
< script >
window.onload = function() {alert(1)}
< /script >
< script >
window.onload = function() {alert(2)}
< /script >
Сохраните файл и запустите его (опыт производился в Firefox 10.0.1).
Первое событие не выполнилось. Его заменило второе.
RSS feed for comments to this post