Vkontakte JavaScript API wrapper

Описание

Vkontakte JavaScript API wrapper предназначен для того, чтобы упростить разработку iframe-приложений для сайта В Контакте, использующих Вконтакте API.

Vkontakte JavaScript API wrapper — это единственный JavaScript-файл, который вам надо подключить к странице, чтобы использовать Вконтакте API. При этом, не нужно задумываться над вычислением параметра sig, над формированием URL для вызова метода API, над реализацией кроссдоменных запросов на основе технологии JSONP, над получением параметров приложения, передаваемых ему через строку запроса — все это делается автоматически!

Документация

Свойства и методы не являются статическими! Необходимо создать объект при помощи конструктора vk_api() и работать с созданным объектом.

Константы объекта

Имя константы Описание
SETT_NOTIFY Используется в методах makeSettings() и external.showSettingsBox() для указания на то, что пользователь разрешил отправлять ему уведомления
SETT_FRIENDS Используется в методах makeSettings() и external.showSettingsBox() для указания на то, что пользователь разрешил доступ к друзьям
SETT_PHOTOS Используется в методах makeSettings() и external.showSettingsBox() для указания на то, что пользователь разрешил доступ к фотографиям
SETT_AUDIO Используется в методах makeSettings() и external.showSettingsBox() для указания на то, что пользователь разрешил доступ к аудиозаписям
SETT_OFFER Используется в методах makeSettings() и external.showSettingsBox() для указания на то, что пользователь разрешил доступ к предложениям
SETT_QUESTIONS Используется в методах makeSettings() и external.showSettingsBox() для указания на то, что пользователь разрешил доступ к вопросам
SETT_WIKI Используется в методах makeSettings() и external.showSettingsBox() для указания на то, что пользователь разрешил доступ к wiki-страницам
SETT_MENU Используется в методах makeSettings() и external.showSettingsBox() для указания на то, что пользователь разрешил доступ к меню слева
SETT_WALL Используется в методах makeSettings() и external.showSettingsBox() для указания на то, что пользователь разрешил публикацию на стене

Свойства объекта

Название свойства Описание
params Параметры, переданные приложению после запуска. Аналог flashVars в случае с Flash-приложениями. Представляет собой объект типа {key: value}
external Содержит методы для доступа к внешним вызовам. Описан ниже

Методы

Название метода Параметры Описание
call String method,
[Object parameters,]
Function onData
Вызывает метод API method, передавая серверу параметры parameters, если указаны. Когда сервер вернет результат, будет вызван обработчик onData с полученным от сервера JSON-объектом в качестве единственного параметра
addCallback String name,
Function callback
Добавляет функцию callback в качестве обработчика события name. Обработчики описаны в официальной документации Вконактев разделе Обработка событий.
Функция возвращает ID установленного обработчика.
removeCallback String name,
Number callback_id
Удаляет обработчик события name, ID которого callback_id (возвращается методом addCallback()).
makeInstall Function isInstalled Заставляет пользователя установить приложение. При вызове открывает окно установки приложения. Если пользователь отказывается от установки, вместо приложения будет отображаться сообщение о том, что необходимо установить приложение и ссылка для установки.
makeSettings Number settings Заставляет пользователя установить приложению настройки settings. Отображает окно установки настроек с выбранными опциями. Если пользователь не согласится с установкой параметров settings, то вместо приложения будет отображаться сообщение о том, что необходимо произвести настройку и ссылка, активирующая окно настроек.

Методы внешних вызовов

Имейте ввиду, что данные методы могут меняться разработчиками контакта. Актуальный список методов внешних вызовов доступен в официальной документации Вконтакте.

Название метода Параметры Описание
showPaymentBox int votes Открывает окно для ввода голосов на счет в приложении. Если параметр votes равен 0, то пользователю будет предложено указать количество голосов вручную. По умолчанию votes равен 0
showSettingsBox int settings Открывает окно с пользовательскими настройками приложения. Параметр settings — это битовая маска запрашиваемых настроек. Если параметр settings равен 0, то пользователю будет предложено разрешить все действия приложению. Подробнее о настройках приложения можно прочитать в описании метода getUserSettings официальной документации Вконтакте
showInstallBox   Открывает окно с предложением установить приложение
showInviteBox   Открывает окно для приглашения друзей пользователя в приложение
resizeWindow int width,
int height
Инициирует изменение ширины и высоты элемента iframe. Максимальное значение ширины окна соответствует 807 или 827 точек в зависимости от того включены отступы и элементы управления или нет
scrollWindow int top,
int speed
Инициирует скроллинг окна браузера по вертикали. Параметр top задает смещение скролла относительно нулевой координаты окна. Например, для того, чтобы прокрутить окно на самый верх страницы, необходимо передать значение 0. Второй параметр speed задает скорость анимации в миллисекундах и по умолчанию равен 0

Использование

Для использования скрипта, необходимо скачать его, разместить на своем сайте в любом каталоге, а затем, непосредственно в приложении, добавить его к странице:



Далее нужно создать объект, с которым и будет проходить вся дальнейшая работа:

//Создаем объект от vk_api(). Вся дальнейшая работа должна проходить
//только с объектом api.
var api = new vk_api(
    //Это Секрет, он указан на странице редактирования приложения
    'hGtsH5G0',

    //Эта функция будет вызвана, если инициализация API пройдет успешно.
    //Хорошее место для установки всех callback-функций через
    //addCallback()
    function() {

        //Вызываем окно изменения настроек с отмеченными настройками для
        //доступа к друзьям и к стене. Пользователь не сможет закрыть
        //вызванное окно, пока не установит требуемые настройки.
        api.makeSettings(api.SETT_FRIENDS | api.SETT_WALL);

        //Добавляем функцию, которая запустится, если пользователь добавит
        //приложение к себе на страницу.
        api.addCallback(
           'onApplicationAdded',
            function() {
                //действия
            }
        );
    },

    //Эта функция вызывается, если инициализация API не состоялась.
    //В этом случае, невозможно использовать внешние (external) вызовы.
    function() {
        //сообщение об ошибке
    }
);

Ну и самое интересное, то, ради чего и писался этот скрипт — вызовы методов API:

//Вызываем метод API через функцию call()
api.call(

    //Название метода API.
    //Допустим, получение расширенной информации о профилях.
    'getProfiles',

    //Это объект с параметрами метода API. Если параметров нет,
    //то этот аргумент можно не указывать.
    {
        uids: '4124584,2327412,1237975',

        //Можно указывать массивы, которые будут автоматически
        //преобразованы в строки.
        fields: [
            'first_name', 'last_name', 'nickname',
            'bdate', 'city' , 'country', 'photo'
        ]
    },

    //Эта функция будет вызвана, когда будет получен ответ от сервера.
    //data - это готовый к использованию объект, созданный из строки
    //JSON, полученной от сервера.
    function(data) {
        //Действия с объектом data
    }
);

Ниже приведен пример использования внешних функций через external.*:


    Изменить настройки

А через params можно получить доступ к параметрам, переданным приложению при запуске:

//Выводим в контейнер с id="text" все параметры, переданные
//приложению при запуске.
for (var key in api.params) {
    document.getElementById('text').innerHTML +=
            'api.params.' + key + ' = ' + api.params[key] + '<br />';
}

Кстати, при инициализации объекта, необходимо указывать api_secret. Было бы нехорошо оставлять его в коде в открытом виде, даже если вы обфусцируете код. Оптимальный вариант — простенькое кодирование, хотя бы для того, чтобы в исходном коде секрет не встречался.

Так вот, такое кодирование уже реализовано! Конструктору vk_api() в качестве первого параметра можно передавать специальным образом закодированный Секрет. В этом случае, секрет будет автоматически раскодирован. Закодировать секрет вы можете, используя специальный сервис, размещенный по адресу: http://xinit.ru/vk_app_secret/.

Ниже приведен пример использования закодированного секрета при создании объекта.

var api = new vk_api(
    //Так выглядит закодированный секрет. Можно передавать
    //как кодированные, так и некодированные строки.
    'sx--73l40l85l84l41l22l40l17l',

    //Выполнить после успешной инициализации.
    function() {}
);

Скачать

Всегда актуальная версия доступна также на http://vk-jsapi.googlecode.com/. Благодаря системе хранения Google Code, Вы можете подключать библиотеку прямо с сервера Google.

  1. buket
    20 Январь 2010 в 07:17 | #1

    можно пример использования чтобы при заходе юзера на приложение iframe получить его ид

  2. Kolonist
    20 Январь 2010 в 11:10 | #2

    Пожалуйста:

    //Инициализация объекта, как показано выше.
    //***
    
    //Получить ID пользователя, который зашел на страницу
    alert('Ваш ID: ' + api.params.viewer_id);
    

    Описание всех параметров api.params.* можно найти в документации к Вконтакте API.

  3. buket
    20 Январь 2010 в 14:25 | #3

    спасибо с параметрами разобрался, а как с методами работать, перепробовал чтото не получается, например с getProfiles чтобы получить информацию о пользователе(имя город и т.п.) хотелось бы небольшой пример увидеть, дальше бы сам разобрался

  4. buket
    20 Январь 2010 в 17:30 | #4

    делаю так но кроме ид моего ничего не отображается

    //Создаем объект от vk_api(). Вся дальнейшая работа должна проходить
    //только с объектом api.
    var api = new vk_api(
        //Это Секрет, он указан на странице редактирования приложения
        'e3eDBMuyZN',  
    
        //Эта функция будет вызвана, если инициализация API пройдет успешно.
        //Хорошее место для установки всех callback-функций через
        //addCallback()
        //Эта функция вызывается, если инициализация API не состоялась.
        //В этом случае, невозможно использовать внешние (external) вызовы.
        function() {
            document.write('Ваш ID: ' + api.params.viewer_id);  //сообщение об ошибке
        }
    );  
    
    api.call(  
    
        //Название метода API.
        //Допустим, получение расширенной информации о профилях.
         'getProfiles',  
    
        //Это объект с параметрами метода API. Если параметров нет,
        //то этот аргумент можно не указывать.
         {
             //Позже я сделаю, чтобы в таких случаях можно было указывать
             //массивы, а преобразование в строки было бы автоматическим.
             uids: 'тут мой ид',
             fields: 'first_name,last_name,nickname,bdate,city,country,photo'
         },  
    
         //Эта функция будет вызвана, когда будет получен ответ от сервера.
         //data - это готовый к использованию объект, созданный из строки
        //JSON, полученной от сервера.
        function(data) {
            document.write(data);  //Действия с объектом data
        }
    );
    
  5. Kolonist
    20 Январь 2010 в 19:06 | #5

    Во-первых, document.write() нельзя использовать после того, как страница полностью сформирована. Для тестирования используйте innerHTML или alert().

    Во-вторых, если Вы привели сюда код так, как он есть у Вас на странице, то он не будет работать. Объясню почему. При вызове var api = new vk_api() начинается инициализация, а управление передается на следующую команду. И следующая команда выполняется еще до того, как завершена инициализация. Т.е., в Вашем случае, api.call() вызывается еще до того, как объект api готов выполнять команды.

    Чтобы этого не было, можно или вызывать api.call() внутри функции, передаваемой конструктору vk_api() для выполнения в случае успешной инициализации, или вызывать api.call() по событиям от пользователя — нажатие кнопки или ссылки, выбор пункта меню и т.п.

  6. buket
    20 Январь 2010 в 19:36 | #6

    все понял разобрался, JS только начал позновать, возник вопрос теперь запрос проходит но выдает ответ в виде [object Object] в чем может быть проблема?

  7. Kolonist
    20 Январь 2010 в 22:02 | #7

    Так и нет никакой проблемы, так и должно быть. Параметр data — это объект, к полям которого Вы имеете доступ.

    Рассмотрите пример функции-обработчика:

    function(data) {
        var txt = '';
    
        //Перечисляем все поля объекта
        for (var v in data) {
            txt += v + ' = ' + data[v] + '\n';
    
            //Если поле объекта - объект, перечисляем
            //и его свойства
            if (typeof o[v] == 'object') {
                arguments.callee(data[v]);
                txt += '\n';
            }
        }
    }
    
  8. Антон
    22 Январь 2010 в 17:15 | #8

    Спасибо большое за статью.
    Не очень понял про коннект. Ключ есть и шифруем его, а где ip владельца приложения или хотя бы уж самого приложения? По какому принципу коннект происходит?

  9. Антон
    22 Январь 2010 в 17:30 | #9

    Пардон, id это uids. Не догнал сразу. Однако пишу и id и пароль и зашифрованный пробовал – не коннектится никак:( Делал document.write(‘Ваш ID: ‘ + api.params.viewer_id); Пишет Ваш ID: undefined

  10. Leo
    22 Январь 2010 в 17:56 | #10

    Можете выложить фрагмент кода, чтобы при заходе юзера в приложение ему показывалось предложение установить приложение?

  11. 22 Январь 2010 в 20:09 | #11

    Антон
    А что Вы подразумеваете под словом «коннект»?
    Как именно Вы вызываете приложение? Покажите код — так будет проще.

    Потом, повторюсь, document.write() использовать нельзя! На тот момент, когда api.params.viewer_id становится доступным, document.write() уже не работает. как Вы того ожидаете! Для тестирования и отладки используйте alert() или innerHTML.

    Leo
    Пример есть в архиве с vk_api 1.2. Ниже привожу его в укороченном варианте:

    var api = new vk_api(
        'sx--12l07l87l7l12l98l82l54l15l9l',
        function() {
    
            //устанавливает заголовок приложения
            api.callMethod('setTitle', 'MY SUPER APP');
    
            //предложить пользователю установить приложение, а затем
            //назначить приложению указанные настройки
            api.makeInstall(
    
                //эта функция будет выполняться каждый раз при вызове
                //api.makeInstall, но только в том случае, если приложение
                //установлено. Впервые функция выполнится сразу после
                //установки приложения.
                function() {
                    document.getElementById('text').innerHTML += 'Application added\n';
                    api.makeSettings(api.SETT_FRIENDS | api.SETT_WALL);
                }
            );
        },
        function() {
            $('#text').append('Failure\n');
        }
    );
    
  12. 23 Январь 2010 в 03:27 | #12

    В опере 10.10 (1893) почему-то не работает

  13. Slava
    23 Январь 2010 в 04:20 | #13

    По поводу перевода голосов в приложение.
    Сделал кнопку showPaymentBox. Появляется табличка «Внесение голосов». Пополняю баланс на 1 голос, голос зачисляется. Все хорошо, но я могу списать его обратно((( Как сделать так, что бы пользователь оплативший сервис не мог списать голос обратно?

  14. Egor
    23 Январь 2010 в 11:02 | #14

    вам лишь бы пользователя обуть))
    на самом деле – через showPaymentBox пользователь лишь пополняет СВОЙ счет в приложении. А чтобы перевести с его счета на счет приложения, надо это делать через secure.withdrawVotes

  15. 23 Январь 2010 в 18:34 | #15

    Евгений
    В Опера 10.0 все работает. Счас обновлю браузер до версии 10.10 – и буду проверять. Спасибо за замечание.

  16. Slava
    23 Январь 2010 в 18:52 | #16

    secure.withdrawVotes может есть приер как это сделать?

  17. 23 Январь 2010 в 19:06 | #17

    Евгений
    В Опере 10.20 Alpha тоже работает. Так что у Вас либо бажная версия Оперы, либо ошибка в Вашей части скрипта. Приведите код, который не работает — будем разбирать.

    Slava
    Примера лично у меня нет. Но в целом, работать с защищенными методами нужно примерно так же, как и с любыми другими. Только запрос будет идти уже не из клиентской части, а с серверной, и подпись будет немного по другой схеме вычисляться.

    Вот здесь читайте подробнее:
    Защищенное взаимодействие приложения с API
    secure.withdrawVotes

  18. Slava
    23 Январь 2010 в 19:10 | #18

    Спасибо.

  19. 23 Январь 2010 в 23:04 | #19

    Обращайтесь )

  20. Slava
    23 Январь 2010 в 23:23 | #20

    А как сюда пример кода вставлять?

  21. 23 Январь 2010 в 23:26 | #21

    Просто вставьте код и все. Теги в каментах недоступны, я сам применю оформление.

  22. Slava
    24 Январь 2010 в 00:14 | #22

    Скрипт на PHP:

    $api_id = "5555555";
    $method = "secure.withdrawVotes";
    $secret = "ключ из плaтeжeй";
    $version = "2.0";
    $url = "http://api.vkontakte.ru/api.php?";
    $timestamp = time();
    $random = rand();
    $uid = "user_id";
    $votes = "100"; 
    
    $sig = md5(
        "api_id=".$api_id.
        "method=".$method.
        "random=".$random.
        "timestamp=".$timestamp.
        "uid=".$uid.
        "v=".$version.
        "votes=".$votes.$secret
    );
    
    ini_set('default_charset', 'UTF-8'); 
    
    $content =
        "api_id=".$api_id."&".
        "method=".$method."&".
        "random=".$random."&".
        "timestamp=".$timestamp."&".
        "uid=".$uid."&".
        "v=".$version."&".
        "votes=".$votes."&".
        "sig=".$sig; 
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FAILONERROR, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 3);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
    $result = curl_exec($ch);
    
    echo $result;
    curl_close($ch);
    
  23. Slava
    24 Январь 2010 в 00:16 | #23

    Flash-кнопка в iframe:

    btn.addEventListener(MouseEvent.CLICK, btnClick);
    
    function btnClick(e: MouseEvent): void {
        var params:Object = LoaderInfo(root.loaderInfo).parameters;
        var loader:URLLoader = new URLLoader();
    
        //aдpec вaшeгo cкpиптa
        var request:URLRequest = new URLRequest("адресдоскрипта");
    
        request.method = URLRequestMethod.POST;
    
        var vars:URLVariables = new URLVariables();
        vars['auth_key'] = params['auth_key'];
        vars['viewer_id'] = params['viewer_id'];
    
        request.data = vars;
        loader.addEventListener(Event.COMPLETE, onComplete);
        loader.load(request);
    
        function onComplete(event:Event):void {
            stat_txt.text = 'Гoтoвo';
        }
    }
    
  24. Slava
    24 Январь 2010 в 00:17 | #24

    Пpи нaжaтии нa кнoпкy пoлyчaю oтвeт «гoтoвo» , нo гoлoca нe cпиcывaютcя. Чтo нe тaк дeлaю? У мeня нe выxoдит! Пoмoгитe.

  25. 24 Январь 2010 в 00:42 | #25

    Ну в Вашем примере, «Готово» будет показано при любом результате операции. Хорошо бы посмотреть то, что возвращает PHP-скрипт. Сделайте так:

    function onComplete(event:Event):void {
        stat_txt.text = event.result;
    }
    
  26. 24 Январь 2010 в 00:50 | #26

    Кстати, а что Вас заставляет использовать Flash внутри iframe? о_О Если уж Flash, так и делали бы полностью Flash-приложение. Ну а раз iframe-приложение, так надо AJAX использовать.

  27. Slava
    24 Январь 2010 в 00:53 | #27

    1119: Access of possibly undefined property result through a reference with static type flash.events:Event. При таком варианте компиллер выдает ошибку

  28. 24 Январь 2010 в 01:49 | #28

    Ух… Ну я не спец в ActionScript. Смысл в том, что нужно посмотреть, что конкретно ответил сервер.

  29. Slava
    24 Январь 2010 в 02:19 | #29

    возможно, можно обойтись без флэша. очень круто было бы

  30. Slava
    24 Январь 2010 в 18:21 | #30

    PHP скрипт правильный, выполнил запрос. Выдает ошибку 113 Invalid user id , если вписываю свой ( $uid = «user_id»;) id или знакомого то все ок, голоса списываются.

  31. 25 Январь 2010 в 00:58 | #31

    возможно, можно обойтись без флэша. очень круто было бы

    Так Вам и надо без Flash делать! Посмотрите википедию по термину AJAX ;)

    PHP скрипт правильный, выполнил запрос. Выдает ошибку 113 Invalid user id , если вписываю свой ( $uid = «user_id»;) id или знакомого то все ок, голоса списываются.

    Возможно, проблема в том, что пользователь, с которого Вы пытаетесь списать голоса, не разрешил приложению это делать?

  32. Антон
    25 Январь 2010 в 09:46 | #32

    @Leo

    Leo :
    Можете выложить фрагмент кода, чтобы при заходе юзера в приложение ему показывалось предложение установить приложение?

    Пока не могу, еще не разобрался как связать вызов js с приложением в контакте. Если расскажете буду премного благодарен:)

  33. Антон
    25 Январь 2010 в 09:48 | #33

    @Kolonist
    Вот фрагмент кода, я взял его из примера собственно говоря:

    var e2_id = 0;
    
    var api = new vk_api(
        '#####',
        function() {
            alert('Ваш ID: ' + api.params.viewer_id);
        },
        function() {
            $('#text').append('Failure\n');
        },
        true
    );
    
    function custom_api_call() {
        api.removeCallback('onSettingsChanged', e2_id);
    
        api.call(
            'getProfiles',
            {
                uids: '#####',
                fields: [
                    'uid', 'first_name', 'last_name', 'nickname',
                    'bdate', 'city', 'country', 'photo',
                    'has_mobile'
                ]
            },
            function(data) {
                var o = data;
                for (var v in o) {
                    $('#text').append(v + ' = ' + o[v] + '\n');
                    if (typeof o[v] == 'object') {
                        arguments.callee(o[v]);
                        $('#text').append('\n');
                    }
                }
    
                api.external.resizeWindow(680, $('body').height() + 50);
            }
        );
    }
    
  34. Антон
    25 Январь 2010 в 10:02 | #34

    @Kolonist

    Код не получается сюда вставить.
    Вообще я из примера все брал и document.write не использовал.
    Использовал Alert() как выше написано. Но почему-то не логинится что ль…

  35. Антон
    25 Январь 2010 в 16:57 | #35

    @Kolonist
    Под словом коннект я подразумевал – как подключить полученный скрипт к приложению. Т.е. как привязать скрипт к контакту.

  36. 25 Январь 2010 в 21:30 | #36

    Под словом коннект я подразумевал – как подключить полученный скрипт к приложению. Т.е. как привязать скрипт к контакту.

    Да, вроде бы, вот так:

    <script src="vk_api.js" type="text/javascript"></script>
    

    Просто в HTML-файл приложения вставляете эту строку.

  37. Антон
    26 Январь 2010 в 09:48 | #37

    @Kolonist
    Это ж понятно:) Я про другое – как мы полученный html код загружаем как приложение контакта?

  38. Slava
    26 Январь 2010 в 20:33 | #38

    Вопросик. Я добавил табличку установки приложения и приглашения друзей, но секретный ключ не писал. Все работает и без ключа. В чем разница?

  39. 26 Январь 2010 в 23:12 | #39

    как мы полученный html код загружаем как приложение контакта?

    Никак. Приложение должно располагаться на Вашем сайте. В контакт ничего загружать нельзя, там Вы только указываете URL приложения на Вашем сайте.

    Вопросик. Я добавил табличку установки приложения и приглашения друзей, но секретный ключ не писал. Все работает и без ключа. В чем разница?

    Секретный ключ нужен для вызовов API, т.е. для .call(). Все остальное будет работать и без правильного секретного ключа.

  40. 30 Январь 2010 в 08:10 | #40

    Здравствуйте! Вызываю через .call() метод getProfile, указывая все необходимые параметры. Сервер возвращает ошибку номер 3 – Unknown method passed. Что я делаю не так?

  41. 30 Январь 2010 в 17:30 | #41

    Andrey
    Правильно название метода: getProfiles

  42. Александр
    31 Январь 2010 в 16:07 | #42

    Я не силён в js, но почему не работает такой вариант?

    var api = new vk_api(
        '###',
        function() {},
        function() {},
        true
    );
    
    alert(api.params.api_url);
    

    Выводит undefined.

  43. 31 Январь 2010 в 18:00 | #43

    Александр
    Правильно делать так:

    var api = new vk_api(
        '###',
        function() {
            alert(api.params.api_url);
        },
        function() {},
        true
    );
    

    Все действия с созданным объектом необходимо проводить после того, как объект инициализирован. Дело в том, что при вызове new vk_api() программа не ждет завершения инициализации, а тут же переходит к следующим инструкциям, т.е., в Вашем случае, к alert(api.params.api_url). Но так как инициализация на момент вызова alert() еще не завершена, то и свойство params недоступно.

  44. Семён
    3 Февраль 2010 в 15:47 | #44

    А как работать с полученной инфой в PHP? как с $_GET или URI?

  45. 3 Февраль 2010 в 19:51 | #45

    Эээ, ну это, как бы, JavaScript-библиотека. Если Вам надо работать с полученными данными в PHP, то их надо отправить на сервер любым доступным методом.

  46. 4 Февраль 2010 в 23:26 | #46

    А как передать параметры во флешь можно из жава-скрипта?

  47. 5 Февраль 2010 в 22:38 | #47

    Например, через flashVars.

  48. 6 Февраль 2010 в 10:56 | #48

    Тогда по другому сформулирую вопрос, как прочитать flashVars во флеш приложении которое открывается как часть страницы хтмл/жава в ифрейме контакта.

  49. 6 Февраль 2010 в 12:21 | #49

    Изучите вот эти документы:
    http://noregret.org/tutor/navigation/
    http://www.moock.org/webdesign/flash/fscommand/ (на английском)

    Там все очень подробно описано.

  50. 6 Февраль 2010 в 17:07 | #50

    В версии 1.4 не происходит инициализации vk_api, если делается «первый запрос» и возвращаемое значение в формате xml.

    Для исправления предлагаю отключить разбор api_result, если это xml, т.к. скорее всего это предназначается для сервера (как в моём случае).

    Предлагаю кусок кода
    //parse json response from the first api call result
    if (typeof vk_api.prototype.params.api_result != ‘undefined’) {
    vk_api.prototype.params.api_result = eval(‘(‘ + vk_api.prototype.params.api_result + ‘)’);

    Дополнить проверкой xml-формата:
    //parse json response from the first api call result
    if (typeof vk_api.prototype.params.api_result != ‘undefined’) {
    if(vk_api.prototype.params.api_result.indexOf(») != 0)
    vk_api.prototype.params.api_result = eval(‘(‘ + vk_api.prototype.params.api_result + ‘)’);

Страницы комментариев
1 2 3 ... 5 234