2017-01-27 7 views
0

swfをロードするAIRプロジェクトがあります。しかし、ロードされたswfがSecurityErrorを送出すると、私はこのエラーを処理できません!私のコードは怒鳴るです:Loader.load()でSecurityError#2070および#2000を処理する方法

var loader:Loader = new Loader(); 

_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, swfComplete); 
_loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, swfErrors); 
_loader.contentLoaderInfo.addEventListener(Event.INIT, swfInit); 
_loader.contentLoaderInfo.addEventListener(Event.OPEN, swfOpen); 
_loader.contentLoaderInfo.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatus); 
_loader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, swfSecurityError); 
_loader.contentLoaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, uncaughtErrors); 

try { 
    _loader.load(new URLRequest('path.swf')); 
} 
catch(e:SecurityError) { 
    trace("trying handle error!"); 
} 

function swfComplete(e:Event):void { 
    trace("complete"); 
} 

function swfErrors(e:IOErrorEvent):void { 
    trace("swf error: " + e.toString()); 
} 

function swfInit(e:Event):void { 
    trace("swf init"); 
} 

function swfOpen(e:Event):void { 
    trace("swf open. this listener dispatch!"); 
} 

function httpStatus(e:HTTPStatusEvent):void { 
    trace("http status: " + e.toString()); 
} 

function swfSecurityError(e:SecurityErrorEvent):void { 
    trace("trying handle security error. :("); 
} 

function uncaughtErrorEvent(e:UncaughtErrorEvent):void { 
    trace("uncaught error: " + e.toString()); 
} 

FlashDevelopのからの例外:

[Fault] exception, information=SecurityError: Error #2070: Security sandbox violation: caller file.swf cannot access Stage owned by app:/myApp.swf.

[Fault] exception, information=SecurityError: Error #2000: No active security context.

問題は、私のプログラムが終了することにあると私はこれらのセキュリティエラーをキャッチすることはできません。私のプログラムが閉鎖されないようにするには?

答えて

2

ロード・ルーチン違反ではないため、この例外は処理できません。ロードされたコンテンツがステージにアクセスしようとしたときに発生します(また、サンドボックスポリシーのためにアクセスできません)。

  1. はURLLoaderクラスを経由して、バイナリデータとしてファイルをロードし、それをLoader.loadBytes:

    あなたは(おそらく)いくつかの方法でそれを解決することができます。したがって、あなたのコンテンツは同じサンドボックス内のものとして取られ、アプリケーション全体に完全にアクセスできます。

  2. 例外処理:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/events/UncaughtErrorEvent.html
  3. このSWFをアプリケーションに追加すると、そのSWFはメインSWFと同じフォルダにあり、同じサンドボックスにも読み込まれます。 FDからAIRアプリケーションを公開したことがないとはっきり言ってはいけません。
+0

お返事ありがとうございます。私は解決策としてloadBytesを試しましたが、他のものは私が実際に実行することはできません。私はそれをしましたが、問題があります。私は後で "unloadAndStop"を使用してメモリーからそれらをアンロードする一連のファイルをロードしますが、このコマンドはロードされたファイルからすべてのバイトを削除しません。これはおそらく私の主なswfに埋め込まれているクラスの定義のためです。私のプログラムがメモリ消費とクラッシュを増やすのはどういうことでしょう。これをどうすれば解決できますか? – bio

+0

あなたは何百(または少なくとも数十)メガバイトについて話していますか?一度にすべて読み込んでみることができます。あるいは、ロードされたコンテンツが何を必要としているのかを記述し、それを再プログラムしてステージや環境にアクセスする必要がないようにすることで、それらを定期的にロードしたりアンロードしたりすることができます。 – Organis

関連する問題