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

    @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);
    });
    Ответ написан
    Комментировать