2012-01-25 19 views
0

actionscript 3.を使用して、Flashプロフェッショナルcs5.5内のタイムラインの25番目のフレームにXMLベースのイメージギャラリーを含むswfファイルをロードしようとしています。このエラーが表示されます。「SecurityError:Error#2000:アクティブなセキュリティコンテキストがありません」。以下は、AS3コードです:操作は、アプリケーションが実行されているセキュリティサンドボックスで許可されていないときSecurityError:エラー#2000:外部swfファイルをインポート中にアクティブなセキュリティコンテキストがありません

stop(); 

import flash.net.URLRequest; 
import flash.display.Loader; 
import flash.events.Event; 
import flash.events.ProgressEvent; 

function startLoad() { 
    var mLoader:Loader = new Loader(); 
    var mRequest:URLRequest = new URLRequest("../xml_gallery_2_852/XMLGALLERY2.swf"); 
    mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler); 
    mLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressHandler); 
    mLoader.load(mRequest); 
} 

function onCompleteHandler(loadEvent:Event) { 
    addChild(loadEvent.currentTarget.content); 
} 

function onProgressHandler(mProgress:ProgressEvent) { 
    var percent:Number = mProgress.bytesLoaded/mProgress.bytesTotal;   
    trace(percent); 
} 

startLoad(); 

答えて

4

セキュリティエラーがスローされます。これは、いくつかの理由持つことができます - ローカルにアクセスしようとしていることになるではない、少なくともそのうちの。ファイルをuse-network=trueでコンパイルされたアプリケーションから削除します。

EDIT

あなたの質問を再読み込み私はほとんどの原因に遭遇してきたが、私はとにかく、中に他の情報を残しておきます - それは他のユーザーに便利かもしれません。

あなたはターン負荷の画像ギャラリー、他のファイル(XML)をロードしているが、フラッシュIDEからエクスポートしたときに、あなたのFLAが自動的にlocal-trustedアプリケーションとして実行しながら、外部のSWFは、use-networkオプションでコンパイルされました。これはもちろんサンドボックス違反です。

有効なセキュリティポリシーが設定されているWebサーバーからSWFを起動することで、これをテストすることができます。

ところで、セキュリティエラーを処理するためにイベントリスナーをcontentLoaderInfoに追加すると、アプリがクラッシュして正常に終了するのを防ぐことができます。

ENDのEDIT

エラーは、そのセキュリティコンテキストのローダ及び初期化のインスタンス化の間に短い遅延に関連することができます。詳細は、this blog postを参照してください。

これが本当であるならば、あなたは正しく、すなわち、setTimeout()を使用して、または機能ブロックの外で、あなたのローダーの宣言を移動するロード要求を遅延させることにより、エラーを取り除くことができるはずです。

var mLoader:Loader = new Loader(); 

function startLoad() { 
    var mRequest:URLRequest = new URLRequest("../xml_gallery_2_852/XMLGALLERY2.swf"); 
    mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler); 
    mLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressHandler); 
    mLoader.load(mRequest); 
} 

宣言temp変数としてのローダーはとにかく「ダーティ」です。参照は失われますが、contentLoaderInfoに追加したイベントリスナーは、それがまだ必要かどうかに関係なく、メモリに保持されます。これにより、複数のファイルをロードしようとすると、重大なメモリリークが発生する可能性があります。ロードされたコンテンツが不要になったときに適切に処理したい場合は(Loader.unload()を使用)、ローダ自体をガベージコレクションに使用できるようにするには(イベントリスナーを削除し、使用後のnull参照)。

+0

残念ながら私が間違っていたのは、私がロードしようとしていたswfファイルがas2で書かれていたことを知りたかったからです。私は簡単な解決策を見つけました: - navigateToURL(new URLRequest("xml_gallery_2_852/XMLGALLERY2.swf"), '_self');

0

これは古いスレッドですが、既に回答があったようですが、明らかに解決策がありました(ここで助けられたかどうかは分かりません)。

私は悲しみを救うためにこの答えを使っていた可能性があります。エラー#2000:アクティブなセキュリティコンテキスト

例外SecurityError -

私はこの不可解なメッセージを取得し、Loaderクラスを経由して画像にロードし、維持したが(それは私が問題を特定する助けにはならなかったので、私は不可解と言います)

解決策 - ソースへの正しいパスを使用してください。私はディレクトリ名を変更して、自分のコードを更新するのを忘れてしまった。

URLRequestで "src/pics/image01.png"と呼んでいましたが、 "pics"ディレクトリを "img"に変更しました。 "src/img/image01.png代わりに。

「エラー#2000」というメッセージが表示された場合は、のパスを再度確認してから、そのファイルが他のものより先にに存在することを確認してください。

関連する問題