У меня возникла проблема, когда я иногда (то есть не всегда) вижу всплывающее окно с ошибкой отладчика Flash Player после запуска моего приложения:
Error #2044: Unhandled securityError:. text=Error #2048: Security sandbox violation: http://example.com/myApp.swf cannot load data from localhost:4499.
at org.mydomain.mypackage::MyClassUsingSocket()
at MyMainApplicationClass$cinit()
at global$init()
at global$init()
at flash.system::ApplicationDomain/hasDefinition()
at mx.managers::SystemManager/getDefinitionByName()
at _MyMainApplicationClass_mx_managers_SystemManager/create()
at mx.managers::SystemManager/initializeTopLevelWindow()
at mx.managers::SystemManager/http://www.adobe.com/2006/flex/mx/internal::docFrameHandler()
У меня есть некоторый код в этом приложении, который пытается подключиться к localhost:4499
через Socket
, и эта ошибка возникает, когда сервер сокетов не работает и прослушивает соединения, , что и следовало ожидать . Однако я не понимаю, что почему Flash Player жалуется на необработанные ошибки securityErrors, когда у меня есть блоки try / catch для перехвата SecurityError
s при попытке подключить сокет (а также прослушиватели для SecurityErrorEvents
, на которые это сообщение об ошибке, похоже, не указывает).
Конструктор соответствующего класса находится ниже:
/**
* Constructor.
*/
public function MyClassUsingSocket(aHost:String = null, aPort:int = -1):void
{
super();
var hostToConnectTo:String = (aHost != null) ? aHost : DEFAULT_HOST;
var portToConnectTo:int = (aPort != -1) ? aPort : DEFAULT_PORT;
try
{
_out_socket = new Socket();
// note: the event handlers used below are private functions within the same class
_out_socket.addEventListener(Event.CONNECT, _socketConnectEventHandler, false,0,true);
_out_socket.addEventListener(IOErrorEvent.IO_ERROR, _socketIOErrorEventHandler, false,0,true);
_out_socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, _socketSecurityErrorEventHandler, false,0,true);
_out_socket.connect(hostToConnectTo, portToConnectTo);
}
catch(e:IOError)
{
enabled = false;
}
catch(e:SecurityError)
{
enabled = false;
}
}
Есть идеи о том, почему это может происходить? Чего мне не хватает?