События виджета "мне нравится" не работают в IFrame-прилож.

Обсуждение и помощь по вопросам взаимодействия с ВКонтакте API в IFrame-приложениях (JavaScript, PHP и т.д)
Ответить
andrewinc
Сообщения: 2
Зарегистрирован: 27 ноя 2012, 13:22

События виджета "мне нравится" не работают в IFrame-прилож.

Сообщение andrewinc »

Всем доброго времени суток!

В IFrame-приложении стоит виджет "мне нравится". Заказчик попросил отловить события клика по нему. (Используется только JavaScript-Api) Если верить документации http://vk.com/pages?oid=-1&p=%D0%94%D0% ... 0%B8%D1%8F такая возможность имеется и мне нужно использовать VK.Observer для включения своего обработчика соответствующих событий. Отягощает отсутствие примера, но его я честно подглядел на http://flapps.ru/forum/topic3122.html.
Написал тестовый код, который просто выводит alert'ы по событиям... но он не работает. лайк - есть, а alert'ов нет.

Код: Выделить всё

 var liked=function(){    alert('like');}var unlike=function(){    alert('unlike');}$(function(){  VK.init(function() {     //VK like    VK.Widgets.Like('vk_like', {type: 'mini', verb: 1});            VK.Observer.subscribe('widgets.like.liked', liked);    VK.Observer.subscribe('widgets.like.unliked', unlike);  });      }); 
На одной из статей http://habrahabr.ru/post/158991/ читал, что контакт кэширует запросы, однако если верить firebug'у то сообщение на сервер отсылается, а значит и клиентские скрипты должны отработать, чего по какой-то причине не происходит.

Смутило, что для JavaScript-api VK.Observer вообще не заявлено в документации http://vk.com/pages?oid=-1&p=IFrame-%D0 ... ript%20API


Вторая мысль которая возникла: использовать VK.addCallback(String name, Function value) что показано на http://vk.com/pages?oid=-1&p=IFrame-%D0 ... 0%B8%D0%B9 (не смотря на отсутствие там в таблице событий моего, впрочем и для VK.Observer http://vk.com/pages?oid=-1&p=VK.Observer обраточика из доки к виджету тоже нет)
Получилась вариация передыдущего кода с изменёнными строками

Код: Выделить всё

     //VK like    VK.Widgets.Like('vk_like', {type: 'mini', verb: 1});            /* VK.Observer.subscribe('widgets.like.liked', liked);    VK.Observer.subscribe('widgets.like.unliked', unlike); */    VK.addCallback('VK.Observer.widgets.like.liked', liked);    VK.addCallback('VK.Observer.widgets.like.unliked', unlike); 
Пробовал даже таким путём:

Код: Выделить всё

     //VK like    VK.Widgets.Like('vk_like', {type: 'mini', verb: 1});            /* VK.Observer.subscribe('widgets.like.liked', liked);    VK.Observer.subscribe('widgets.like.unliked', unlike); */    VK.addCallback('widgets.like.liked', liked);    VK.addCallback('widgets.like.unliked', unlike); 
результат тот-же, т.е. никакой. Поиск решения перешел в плоскость "методом тыка", если кто-то успешно решал задачу.. был бы рад получить посдказку: куда копать. А то что-то то ли лыжи не едут то ли...
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: События виджета "мне нравится" не работают в IFrame-прилож.

Сообщение Александр »

andrewinc

Код: Выделить всё

$(function(){  VK.Observer.subscribe('widgets.like.liked', liked);  VK.Observer.subscribe('widgets.like.unliked', unlike);   VK.init(function() {    //VK like    VK.Widgets.Like('vk_like', {type: 'mini', verb: 1});  });
тоже не работает?
andrewinc
Сообщения: 2
Зарегистрирован: 27 ноя 2012, 13:22

Re: События виджета "мне нравится" не работают в IFrame-прилож.

Сообщение andrewinc »

Спасибо за вариант.
Попробовал.
К сожалению, данный вариант не отображает виджет. т.к. по всей видимости обращение к Observer вызывает ошибку, и прекращение выполнения всего что ниже неё.
Аватара пользователя
sergiks
Сообщения: 51
Зарегистрирован: 06 окт 2012, 11:59

События виджета: удалось решить проблему?

Сообщение sergiks »

Добрый вечер,

удалось ли решить проблему?
Бьюсь сейчас с тем же: хорошо бы ловить события "widget.subscribed" в iFrame приложении. Но не ловится.

Пробовал:

Код: Выделить всё

VK.init( function(){  VK.addCallback( "widgets.subscribed", cb_subscribed );  VK.addCallback( "widgets.unsubscribed", cb_unsubscribed );}
Но нет - тишина, события не отлавливаются.
moonshadow
Сообщения: 1
Зарегистрирован: 25 апр 2013, 13:35

Re: События виджета "мне нравится" не работают в IFrame-прилож.

Сообщение moonshadow »

Если используете http://vk.com/js/api/xd_connection.js, скопируйте из http://vkontakte.ru/js/api/openapi.js часть VK.Observer

Код: Выделить всё

      if (!VK.Observer) {       VK.Observer = {         _subscribers: function() {           if (!this._subscribersMap) {             this._subscribersMap = {};           }           return this._subscribersMap;         },         publish: function(eventName) {           var             args = Array.prototype.slice.call(arguments),             eventName = args.shift(),             subscribers = this._subscribers()[eventName],             i, j;            if (!subscribers) return;            for (i = 0, j = subscribers.length; i < j; i++) {             if(subscribers[i] != null) {               subscribers[i].apply(this, args);             }           }         },         subscribe: function(eventName, handler) {           var             subscribers = this._subscribers();            if(typeof handler != 'function') return false;            if(!subscribers[eventName]) {             subscribers[eventName] = [handler];           } else {             subscribers[eventName].push(handler);           }         },         unsubscribe: function(eventName, handler) {           var             subscribers = this._subscribers()[eventName],             i, j;            if (!subscribers) return false;           if (typeof handler == 'function') {             for (i = 0, j = subscribers.length; i < j; i++) {               if (subscribers[i] == handler) {                 subscribers[i] = null;               }             }           } else {             delete this._subscribers()[eventName];           }         }       }     }          VK.Observer.subscribe("widgets.like.liked",function(){         console.log('widgets.like.liked');    });        VK.Observer.subscribe("widgets.like.unliked",function(){         console.log('widgets.like.unliked');    }); 
Ответить