@CMTV

VK API. Как получить id виджета «Мне нравится» при лайке?

Здравствуйте!

Уже несколько дней мучаюсь со следующей проблемой, которую никак не получается решить.

Есть страница с произвольным количеством VK виджетов "Мне нравится". Например, такая:

<div id="widget_1"></div>
<script>VK.Widgets.Like("widget_1", {type: "vertical", pageURL: 'url_1'}, 1);</script>

<div id="widget_2"></div>
<script>VK.Widgets.Like("widget_2", {type: "vertical", pageURL: 'url_2'}, 2);</script>


ВКонтакте предоставляют инструмент VK Observer для отлова лайка.

Сделать это можно так:

VK.Observer.subscribe("widgets.like.liked", function f(likesNum)
{
alert ("Вы лайкнули! Количество лайков: " + likesNum);
});


Как видно, функции-перехватчику передается количество лайков виджета. И все.

Как можно узнать параметры (pageURL, page_id) виджета, с помощью которого был поставлен лайк?

===
Это можно было бы реализовать, отследив вместе с "liked" еще и клик по виджету. Но отловить клик по iframe виджета нормальным путем невозможно, а существующие костыли работают через раз + игнорируют касания пальцем со смартфонов.
===

UPD:

Попробовал принимать два параметра от VK Observer: a и b.

a содержит количество лайков у виджета. Ожидаемо.

А вот b содержит какое-то число. Путем экспериментов я понял, что это число означает номер виджета на странице (не его id, просто какой по счету он создался на текущей странице).

Это можно использовать для идентификации виджета, но это недокументированная возможность. Как долго она будет работать?
  • Вопрос задан
  • 615 просмотров
Решения вопроса 1
@CMTV Автор вопроса
Несмотря на то, что на запрос ВКонтакте мне ответили отрицательно:

Здравствуйте, Пётр!

Простите за долгое ожидание.

К сожалению, на данный момент реализацию Вашей идеи никак не осуществить. Разработчики пообещали сделать, чтобы обсервер принимал параметр page_id.

Команда ВК.


Но я нашел способ. На данный момент - 18.02.2017 - VK Observer при событии лайка возвращает не один (как указано в документации), два параметра: likes_num и vk_widget_num.

VK.Observer.subscribe("widgets.like.liked", function f(likes_num,vk_widget_num) {
       /* ... */
    });


Первый параметр likes_num содержит количество лайков у текущего виджета. Все как положено.

Второй параметр vk_widget_num содержит число уже загружнных виджетов на странице (виджет "Мне нравится", "Комментарии", "Это интересно" и т.д.). Другими словами VK вторым параметром передает вам какой по счету (начиная с 1) этот виджет будет на странице.

===== Решение задачи
Для начала добавим дополнительный атрибут к HTML тегам:

<div id="widget_1" class="like_widget" data-widget-number="1"></div>
<script>VK.Widgets.Like("widget_1", {type: "vertical", pageURL: 'url_1'}, 1);</script>

<div id="widget_1" class="like_widget" data-widget-number="2"></div>
<script>VK.Widgets.Like("widget_2", {type: "vertical", pageURL: 'url_2'}, 2);</script>


Теперь регистрируем наш обработчик события "widgets.like.liked":

VK.Observer.subscribe("widgets.like.liked", function f(likes_num,vk_widget_num)
{
    var widget_id = $('.like_widget[data-widget-number=' + vk_widget_num + ']').attr('id');

    alert ("Вы лайкнули! Был нажат виджет с ID: " + widget_id + ". Количество лайков: " + likes_num);
});
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы