2

我有一个问题,我偶尔(即并非总是)在启动我的应用程序后从 Debug 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通过 a连接Socket,当套接字服务器未运行并正在侦听连接时会发生此错误,这是可以预料的。但是,我明白的是,为什么当我尝试连接套接字时尝试/捕获块来捕获s时, Flash Player 会抱怨未处理的安全SecurityErrorSecurityErrorEvents错误(以及该错误消息的侦听器似乎指向,虽然)。

相关类的构造函数如下:

/**
* 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;
    }
}

关于为什么会发生这种情况的任何想法?我错过了什么?

4

4 回答 4

4

我也为此挣扎了几个小时。解决方案是监听 SecurityErrorEvent.SECURITY_ERROR。显然,只有在没有这样的事件处理程序时才会引发 SecurityError 。

于 2009-06-23T14:58:25.190 回答
0

我不认为对话框中显示的错误是同步的。我几乎可以肯定它们被抛出您的代码路径之外(在异步网络事件期间),因此用 try-catch 捕获它们是不可能的。

所以你会认为在正确的调度程序上监听正确的事件会捕获错误?我试过听舞台、根、对象(套接字),但没有什么能抑制错误。

是的,这太可怕了。一段时间以来,我一直在寻找捕捉这些小动物的方法。唯一的安慰是,我认为它在播放器的发布版本中被压制了。还是很神秘吧?也没有太多文档(我发现)。

这不是一个真正的答案。对不起。

于 2008-12-01T02:57:55.950 回答
-1

在黑暗中射击:尝试捕捉通用错误?



        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;
        }
        catch( e:Error )
        {
                trace( e );
        }
于 2008-11-18T14:04:30.757 回答
-1

这可能不是问题,但您正在捕获 SecurityError 及其引发的 securityError。也许尝试小写 s。

于 2008-11-18T12:51:58.173 回答