Flashのswfファイルの外部からxmlファイルをロードする
-
04-07-2019 - |
質問
私が取り組んでいるWebサイト(古い学校なのでAS2を使用)には、 loadMovie(" foo1.swf&quot ;, placeToShowSwf)
を使用してsub-swfsをロードする、より大きなインデックス.swfファイルがあります。 foo1.swf
から4までがありますが、これらは両者で異なるのは、ロードするコンテンツを指示するxmlファイルのアドレスにある1つの数字だけだからです。そこで、ここに示すように、xmlファイルをロードするためにインデックスファイルが呼び出す単純な関数を使用して、これを1つのファイルに減らしたいと思います。
function setFooNum(i:Number) {
fooNum = i;
//my_xml = new XML(); edit: this line has since been removed and is kept for historical purposes
my_xml.load("foo"+fooNum+".xml");
};
ただし、何らかの理由で、xmlファイルはロードされません。関数の外側で適切にロードされますが、それではあまり役に立ちません。 fooNumは適切に変更されますが、間違ったxmlファイルが既にロードされている場合、それは何の役にも立ちません。私が知る限り、コードは my_xml.load(" foo" + fooNum +&quot..xml")
が存在しないかのように動作します。
これは私が知らないセキュリティ対策の一種ですか?それを回避する方法はありますか?
編集
何人かの人々が指摘したように、 my_xml = new XML()
行が原因でした。残念ながら、今では新しいエキサイティングなエラーが発生しています。インデックスファイルの loadMove()
の直後に setFooNum(i)
が呼び出されると、 setFooNum内の
関数は、fooNumが正しく設定されていることを出力しますが、 trace(fooNum)
() onLoad()
内の trace(fooNum)
(明らかに何もロードされていないにもかかわらず成功を返します) )fooNumが未定義であることを示しています!また、(デバッグ目的で) setFooNum(3)
を呼び出すインデックスswfにボタンを作成しました。これにより、何らかの理由で正常に動作します。そのため、ファイルがロードされるのを数秒間待つことで問題は解決するように見えますが、これは非常にい解決策です。
では、 setFooNum()
を呼び出す前に、すべてが完全にロードされるまでどのように待つのですか?
解決
おそらく、 crossdomain.xml
で適切な権限があることを再確認する必要があります。クロスドメインファイルがジャッキングされている場合、リクエストは一切送信されません。
他のヒント
あなたの関数は毎回新しいXMLインスタンスを作成します。その結果、毎回onLoad関数も定義する必要があります。同じXMLインスタンスを再利用する場合、関数を再定義する必要はありません。 、例えば
var iFooNum:Number; var oXML:XML = new XML(); oXML.onLoad = function (success:Boolean) { if(success) { //Do Something with XML. } } loadFooNum = function(i:Number) { iFooNum = i; oXML.load("foo" + i + ".xml"); }
別のドメインからXMLファイルをロードする場合、フラッシュがXMLファイルをロードできるようにするには、他のドメインにcrossdomain.xmlファイルが必要です。
関数の外部でXMLインスタンスのonLoadイベントハンドラーを定義したと仮定すると、関数本体内からインスタンスの宣言を削除できます。
function setFooNum(i:Number) {
fooNum = i;
my_xml.load("foo"+fooNum+".xml");
};
kirupaウェブサイトのこのチュートリアルはあなたを助けることができます。
http://www.kirupa.com/web/xml/index.htm
ASおよびXMLの操作方法について説明します。これがあなたが答えを得ることを願っています。