Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   iFrame-приложение и crossdomain.xml (http://www.flasher.ru/forum/showthread.php?t=145369)

afarber 06.10.2010 00:41

iFrame-приложение и crossdomain.xml
 
Привет,

переделываю приложения из типа Flash в тип iFrame и столкнулся с такой проблемой:

1) мой мувик лежит на http://preferans.de/Pref.swf
2) результат запроса getProfiles возвращает фотку на сервере контакта - например в моем случае http://cs971.vkontakte.ru/u59751265/b_30628ca4.jpg

Из-за того, что в http://cs971.vkontakte.ru/crossdomain.xml не внесен мой сайт "preferans.de", мой мувик Pref.swf не может изменить размеры аватаров пользователей перед показом. Поэтому в моей игре видно только макушки игроков.

Если бы vkontakte.ru добавил "*" в crossdomain.xml (как в др. соц. сетях) или разрешил бы заливать мой Pref.swf на свой сервер (как Хостинг на Mail.ru), то проблема бы разрешилась.

Кто как борется с этой (наверное частой) проблемой?

пока

in4core 06.10.2010 14:59

Что то мне подсказывает, что надо бы Вам у себя тоже кроссдомайн держать на сайте с разрешением vk . Ну это даже и не важно, у вас вопрос какой то странный, бредовый чтоли. Вы аватарку получаете? Значит запрос проходит верно, а уж раз получаете, то изменять размеры контейнера можете наверняка, причем тут кроссдомайн неясно

afarber 06.10.2010 16:11

Скачать аватар с vkontakte.ru при помощи Loader могу, а вот изменять/читать myLoader.content.width и myLoader.content.height уже немогу - из-за SecurityError. Поэтому приходится показывать аватары пользователей нескалированными - у некоторых видна только макушка на фото.

Но после того, как Вы написали, что мне нужно положить crossdomain.xml на мой собственный сайт, мне стало неинтересно дальше читать.

afarber 06.10.2010 16:22

Вложений: 1
Вот код и screenshot:

Код:

private function handleInit(event:Event):void {
        try {
                var ratio:Number = _loader.content.width / _loader.content.height;

                // loaded picture is broader than _loader
                if (ratio > RATIO) {
                        _loader.content.width = W;
                        _loader.content.height = W / ratio;
                        _loader.content.y = (H - _loader.content.height /* - TH */) / 2;
                } else {
                        _loader.content.width = H * ratio;
                        _loader.content.height = H;
                        _loader.content.x = (W - _loader.content.width) / 2;
                }
        } catch (e:Error) {
                // resizing avatars loaded from vkontakte.ru by the Pref.swf
                // hosted at preferans.de won't work because of their crossdomain.xml
        }
        _loader.visible = true;
        _anonym.visible = false;
}


in4core 06.10.2010 23:46

Вы что издеваетесь? ! Если вы уже получили фото ( тоесть загрузили его) , то флеш уже его обработал по всем параметрам как надо. После полной прогрузки, вывести через трейс - ширину и высоту авы - и школьник справится. Главное понять - что ЗАГРУЗИВ - обработали!

afarber 07.10.2010 01:55

Посмотрите на код наверху, посмотрите на картинку...

in4core 07.10.2010 13:14

Используем событие COMPLETE
проверяем...

Код AS3:

loader.addEventListener(Event.COMPLETE, onComplete)
private function onComplete(e:Event) {
  trace(e.target.data)
}

Что вам выводит можете показать?
Да и еще, надеюсь грузится не массив картинок в лоадер, а по одной на каждый Init

Bgg 07.10.2010 13:28

Цитата:

Сообщение от in4core (Сообщение 941236)
Значит запрос проходит верно, а уж раз получаете, то изменять размеры контейнера можете наверняка, причем тут кроссдомайн неясно

Нельзя изменять то, что не разрешено изменять.

afarber, в блогах поищите, по моему кто то обходил эту проблему. А вообще можно через типо проксю, отдавать вашему серверу url картинки => сервер грузит картинку и отдает клиенту.

mayakwd 07.10.2010 18:11

что мешает разместить на хостинге вк минипрелоадер и грузить им все что вам необходимо в его же домен?

afarber 07.10.2010 21:03

Спасибо, но мини-прелоадер неподходит - т.к. у меня один и тот же мувик для ВКонтакте, Одноклассников, Мейл.ру и др., и главное - пользователи с разных соц. сетей заходят и друг с другом играют.

Способ вроде http://snipplr.com/view/14489/gettin...images-in-as3/ на самом деле тоже не работает.

Наверное сделаю просто прокси-скриптик на PHP, т.к. Одноклассники даже еще хуже чем ВКонтакте - "*" в crossdomain.xml у них есть, но без пароля (или сессии? еще не проверял) они выдают картинку-заглушку.

Добавлено через 7 часов 59 минут
Для вКонтакте я написал такой прокси,
а для Одноклассников пока не придумал:

PHP код:

<?php
define
('MAX_SIZE', 1024 * 1024);

$img = $_GET['img'];
if (
strpos($img, '..') !== false ||
    !
preg_match(',^http://[\w.]*vkontakte\.ru/[\w./?]+$,', $img))
        exit();

$opts = array(
        
'http'=>array(
                
'method' => 'GET',
                
'header' => "Accept-language: en\r\n" .
                            
"Cookie: foo=bar\r\n"
        
)
);

$ctx = stream_context_create($opts);
stream_context_set_params($ctx, array('notification' => 'callback'));
header('Content-Type: ' . $mime);
$fp = fopen($img, 'r', false, $ctx);
fpassthru($fp);
fclose($fp);

function 
callback($code, $severity, $message, $message_code, $bytes_transferred, $bytes_max) {
        if (
$code == STREAM_NOTIFY_FILE_SIZE_IS && $bytes_max > MAX_SIZE)
                exit();

        if (
$code == STREAM_NOTIFY_PROGRESS && $bytes_transferred > MAX_SIZE)
                exit();

        if (
$code == STREAM_NOTIFY_MIME_TYPE_IS) {
                
$mime = strtolower($message);
                switch(
$message) {
                        case 
'image/gif':
                        case 
'image/png':
                        case 
'image/jpg':
                        case 
'image/jpeg':
                                break;
                        default:
                                exit();
                }
        }
}

?>

Если есть предложения по Одноклассникам или как еще надежней сделать прокси-скрипт (чтобы не взломать), пишите.

Думал еще добавить какую-нибудь проверку md5,
чтобы не вызывали с чужих сайтов, но пока не придумал
(из-за дизассемблеров флеша).


Часовой пояс GMT +4, время: 06:21.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.