PDA

Просмотр полной версии : Проблемма в Firefox и Opera с XMLSocket


NeverMore
18.08.2008, 11:44
Столкнулся с проблеммой неработоспособности сокета в firefox и opera
при создании многопользовательского чата...


/* Создаём сокет */

var socket:XMLSocket=new XMLSocket();
if (!socket.connect('10.20.8.1',9876)) {
trace("He удалось отправить запрос");
enterStatus.text="He удалось отправить запрос";
}

/* Сокет подсоединился... */

socket.onConnect=function(success:Boolean):Void {
if (!success) {
trace("He удалось установить соединение");
enterStatus.text="He удалось установить соединение";
} else {
enterStatus.text="Соединение успешно установлено";
}
};

Флешку закидываю в http://10.20.8.1/ch.swf
При этом всё работает только в IE.
Проверил версии...

var flashVersion:String = getVersion();
enterName.text=flashVersion;

В IE 9,0,47,0 , в Опере и Лисе 9,0,124,0
Я использую не кроссбраузерное решение?
Подскажите пожалуйстка как решить данную проблемму :/

NeverMore
18.08.2008, 13:52
Прочитал мануалы по системе безопасности...
Поступает оказывается с версии 9,0,124 запрос на отдачу файла политик.
Отдаю через сокет...
<?xml version='1.0'?><!DOCTYPE cross-domain-policy SYSTEM 'http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd'><cross-domain-policy><allow-access-from domain='*' to-ports='9876' /></cross-domain-policy>
Естественно с \0 на конце (php сокет)

Всеравно не работает :\

DarkLight
18.08.2008, 21:52
Попробуйте делать явный Security.loadPolicyFile перед соединением

wvxvw
18.08.2008, 22:13
if(!socket.connect('10.20.8.1',9876)).....
connect() Возвращает Void а не Boolean. Событие коннекта асинхронное, проверять там нечего, Void приводится к Boolean как false.

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