Нарушение изолированной среды флеш

То что касается флеша, но не касается ВКонтакте API. Например проблемы при создании прыгающего мячика.
catamount5
Сообщения: 63
Зарегистрирован: 10 авг 2010, 13:37

Нарушение изолированной среды флеш

Сообщение catamount5 »

Добрый день!
Сделала игру на флеш AS3, пока без использования api для сайта Вконтакте.
Файлы php выложила на стороннем сервере.

Открываю swf файл на своем компьютере - он коннектится с сервером без проблем.

Выложила игру Вконтакт в тестовом режиме.

Флеш выдает ошибку: "Error #2044: Необработанный securityError:. text=Error #2048: Нарушение изолированной среды: http://cs4552.vkontakte.ru/u93299636/ae767183b4942d.zip не может загрузить данные из...."

Прописала во флеше:

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

Security.allowDomain("здесь домейн");Security.loadPolicyFile("здесь от куда получить файл policy.xml");
Файл policy.xml выложила туда же, где лежат php файлы.

С самим файлом я уже наэкспериментировалась, писала его по-разному:

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

<? xml version="1.0"?><!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"><cross-domain-policy><allow-access-from domain="vkontakte.ru"/><allow-access-from domain="www.vkontakte.ru"/></cross-domain-policy>
и

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

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE cross-domain-policy SYSTEM "/xml/dtds/cross-domain-policy.dtd"><cross-domain-policy><allow-access-from domain="*" secure="false" to-ports="*" /></cross-domain-policy>
и

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

<?xml version="1.0"?><!-- http://www.adobe.com/crossdomain.xml --><cross-domain-policy><allow-access-from domain="*" secure="false" to-ports="*"/></cross-domain-policy>
И какие только варианты не находила в интернете.
Все-равно "Нарушение изолированной среды"!

Помогите, пожалуйста
Аватара пользователя
alexei
Разработчик
Разработчик
Сообщения: 836
Зарегистрирован: 21 янв 2010, 19:44

Re: Нарушение изолированной среды флеш

Сообщение alexei »

Может проблема с сервером, скинь исходник, я на своем попробую сервере.
catamount5
Сообщения: 63
Зарегистрирован: 10 авг 2010, 13:37

Re: Нарушение изолированной среды флеш

Сообщение catamount5 »

я решила проблему
решение оказалось банально простым

хотя потратила весь день, облазила интернет, перерыла кучу книг
а оказывается:

"открыть publish settins и там есть комбоБокс внизу, в
нем два пункта - access local files only и network access only. У меня
стоял первый вариант - т.е. локальный доступ, а надо выбрать второй -
доступ по сети."
xenreal
Сообщения: 33
Зарегистрирован: 29 ноя 2010, 16:39

Re: Нарушение изолированной среды флеш

Сообщение xenreal »

Та же самая ошибка, Error #2044, сколько не прописывал политики, не помогает. На моем компе все работает, а вконтакте выдает одну и ту же ошибку при коннекте сокета.
Что не делаю, не помогает. Хотелось бы знать, где именно можно выставить флаг network access only. (У меня FlashDevelop)
xenreal
Сообщения: 33
Зарегистрирован: 29 ноя 2010, 16:39

Re: Нарушение изолированной среды флеш

Сообщение xenreal »

Приложение пишу в FlashDevelop на Actionscript3 , сервер на C. При запуске клиента локально все работает, соединение с удаленным сервером происходит успешно. При попытке запустить приложение из вконтакта, появляется ошибка:

'"Error #2044: Необработанный securityError:. text=Error #2048: Нарушение изолированной среды: http://cs***.vkontakte.ru/u*****/ae*********.zip не может загрузить данные из...."

Использую сокет, адобовский хэлп и колина мука проштудировал, ничего не помогает.


Попробовал сделать минимальный клиент, убрав все лишнее, все равно не работает. Грешу на настройки компиляции, но уверенности нету. Может вы бы могли посмотреть клиент, может у вас заработает.

http://dl.dropbox.com/u/7202810/test_sock.zip
Вот сам клиент, с моего компьютера работает, с вконтакта - нет.

crossdomain.xml на сервере прописан корректно, не могу понять в чем ошибка
xml файл вроде как впорядке, http://81.177.160.137/crossdomain.xml

<cross-domain-policy>
<site-control permitted-cross-domain-policies="master-only"/>
<allow-access-from domain="vkontakte.ru" to-ports="6500"/>
<allow-access-from domain="www.vkontakte.ru" to-ports="6500"/>
<allow-access-from domain="vk.com" to-ports="6500"/>
<allow-access-from domain="www.vk.com" to-ports="6500"/>
</cross-domain-policy>
xenreal
Сообщения: 33
Зарегистрирован: 29 ноя 2010, 16:39

Re: Нарушение изолированной среды флеш

Сообщение xenreal »

причем эта ошибка точно не из за того, что запускается с вконтакта, даже если запускать с других мест, все равно не работает (например с http://megaswf.com/serve/79278/)
Аватара пользователя
bodnar
Модератор
Модератор
Сообщения: 1399
Зарегистрирован: 03 апр 2010, 06:41

Re: Нарушение изолированной среды флеш

Сообщение bodnar »

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


UPD <policy-file-request/> вот что спросит флешка у сервера

UPD2 причем спрашивать будет кажется на 433 порту

UPD3 а может и не 433
xenreal
Сообщения: 33
Зарегистрирован: 29 ноя 2010, 16:39

Re: Нарушение изолированной среды флеш

Сообщение xenreal »

По крайней мере в книге написано, что файл политик можно скачивать через http c помощью Security.loadPolicyFile()

Закономерность такая, если запускать клиент со своего компьютера (песочница типа localTrusted), все проходит успешно, ошибок никаких не появляется
Если клиент запустить удаленно, например с сервера, на котором находится клиент(http://81.177.160.137/testsock.swf) или с вконтакта, то сыплются ошибки:

Предупреждение: На xmlsocket://81.177.160.137:6500 истекло время (3 сек) ожидания файла политики для сокета. Это не должно привести к каким-либо проблемам, однако см. описание на веб-сайте http://www.adobe.com/go/strict_policy_files_ru.

Ошибка: SWF-файлу от http://81.177.160.137/testsock.swf не удалось подключиться к сокету в своем собственном домене без файла политики. Сведения об устранении этой проблемы см. на веб-сайте http://www.adobe.com/go/strict_policy_files_ru.

*** Нарушение безопасности изолированной среды ***
Подключение к 81.177.160.137:6500 прервано – нет разрешения от http://81.177.160.137/testsock.swf
Error #2044: Необработанный securityError:. text=Error #2048: Нарушение изолированной среды: http://81.177.160.137/testsock.swf не может загрузить данные из 81.177.160.137:6500.
at Main/init()[D:\test_sock\src\Main.as:31]
at Main()[D:\test_sock\src\Main.as:22]
Аватара пользователя
bodnar
Модератор
Модератор
Сообщения: 1399
Зарегистрирован: 03 апр 2010, 06:41

Re: Нарушение изолированной среды флеш

Сообщение bodnar »

Еще раз говорю. Если клиент присылает <policy-file-request/> то в ответ отправляешь ему файл политики (на забудь в конце нулевой байт)
xenreal
Сообщения: 33
Зарегистрирован: 29 ноя 2010, 16:39

Re: Нарушение изолированной среды флеш

Сообщение xenreal »

В том то и дело, что на сокет сервера никакого реквеста почему-то не поступает. А файл политик я пытаюсь загрузить через http:

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

package {    import flash.display.Sprite;    import flash.system.Security;    import com.actionscript_flash_guru.fireflashlite.Console    public class SocketExample extends Sprite {         public function SocketExample() {            Security.loadPolicyFile("http://81.177.160.137/crossdomain.xml");            var socket:CustomSocket = new CustomSocket("81.177.160.137", 6500);        }    }}

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

 package {    import flash.errors.*;    import flash.events.*;    import flash.net.Socket;     class CustomSocket extends Socket {        private var response:String;         public function CustomSocket(host:String = null, port:uint = 0) {            super();            configureListeners();            if (host && port)  {                super.connect(host, port);            }        }         private function configureListeners():void {            addEventListener(Event.CLOSE, closeHandler);            addEventListener(Event.CONNECT, connectHandler);            addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);            addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);            addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);        }         private function writeln(str:String):void {            str += "\n";            try {                writeUTFBytes(str);            }            catch(e:IOError) {                trace(e);            }        }         private function sendRequest():void {            trace("sendRequest");            response = "";            writeln("GET /");            flush();        }         private function readResponse():void {            var str:String = readUTFBytes(bytesAvailable);            response += str;        }         private function closeHandler(event:Event):void {            trace("closeHandler: " + event);            trace(response.toString());        }         private function connectHandler(event:Event):void {            trace("connectHandler: " + event);            sendRequest();        }         private function ioErrorHandler(event:IOErrorEvent):void {            trace("ioErrorHandler: " + event);        }         private function securityErrorHandler(event:SecurityErrorEvent):void {            trace("securityErrorHandler: " + event);        }         private function socketDataHandler(event:ProgressEvent):void {            trace("socketDataHandler: " + event);            readResponse();        }    }}
Ответить