3

他の SWF をロードする予定の AS3 SWF があります。これらの子 SWF はすべて、URL で 1 つのパラメータを取ります。AS2 の子をロードするときに動作するようには見えず、両方を処理できる必要があります。

ので、私は持っています

var request:URLRequest = new URLRequest();
var loader:URLLoader = new URLLoader();

request.url = "http://domain/as2.swf?param=foo";
loader.load(request);
// etc on to the eventListeners, addChild, etc

as2 SWF が読み込まれると、渡したパラメーターが表示されません。_root.param を探しています。私はこれを間違っていますか、それとも不可能を試みていますか?

編集: AS2 ローダーからこれらの URL パラメーターを使用して SWF を読み込むことができ、問題なく動作することを追加する必要があります。

4

5 に答える 5

4

AS2 と AS3 は異なる仮想マシンで実行されるため、これらの間の通信は簡単ではありません。いくつかのヒントについては、このhttp://www.gskinner.com/blog/archives/2007/07/swfbridge_easie.htmlを確認してください。

編集: ロードされた as2 コンテンツを変更できない場合、唯一のオプションは、上記のリンクされた例を使用して as3 と通信し、_root.varname を使用してロードされた as2 コンテンツとインターフェースする「ラッパー」as2 ローダーを作成することです。ただ働く。

于 2009-01-26T22:10:44.723 に答える
0

AS3-> AS3

ムービー1(www.domain1.com):「購入」ボタンをクリックすると外部ムービーをロードします...

buy.addEventListener(MouseEvent.CLICK,function(){                   
    var ldr:Loader = new Loader();
    var url:String = "http://www.domain2.com/movie.swf?a=b&c=d";
    var urlReq:URLRequest = new URLRequest(url);
    ldr.load(urlReq);
    addChild(ldr);
    });

映画2(http://www.domain2.com/movie.swf):

var mc:MovieClip = this as MovieClip;
var ldi:LoaderInfo = mc.loaderInfo;
var lobj:Object = ldi.parameters as Object;

for (var l in lobj) {
    dumper.htmlText += l+" => "+lobj[l]+"<br />";
}

「ダンパー」は、Movie2にあるダイナミックテキストボックスフィールドの名前です。出力は次のようになります。

a => b
c => d
于 2010-01-22T13:30:39.093 に答える
0

_root.param を探す代わりに、_root._url を使用して、パラメーターを手動で解析します。

var url: String = _root._url;
var param: String = 'param=';
var paramStart: Number = url.lastIndexOf(param);
var paramValue: String = url.substring(paramStart + param.length, url.length);
trace(paramValue);

SWFBridge は素晴らしく、このようなものにはやり過ぎです。

于 2012-03-27T01:12:11.610 に答える
0

SWF がロードされた後、ステージに追加する前に変数を動的に割り当てることを試みる価値があるかもしれません。すなわち。

loader.contentLoaderInfo.addEventListener(Event.COMPLETE, movieLoaded);

function movieLoadedHandler(event : Event) : void
{
    var loaderInfo : LoaderInfo = event.target as LoaderInfo;
    var clip : DisplayObject = loaderInfo.content;

    for each(var prop in varsToTransfer)
    {
        clip[prop] = varsToTransfer[prop];
    }

    // add to parent
}

それがどうなるか教えてください。

于 2009-01-27T07:02:17.523 に答える
-1

それは間違っている。

" http://domain/as2.swf?param=foo "

domainという名前のサーバー上のas2.swfという名前のファイルに対する要求です。その http 要求の一部である ? param =fooパラメーターは、要求が完了すると失われます。サーバーがこれらの変数に従って何かをする必要がある場合はそうするでしょうが、これらの変数を検出するように.swfファイルに要求しているというのはばかげています。

Flash Player の Global オブジェクト (Global 名前空間) に変数を配置すると、as2 .swf がその Flash Player にロードされるときに、Global オブジェクトで設定した変数にアクセスできるようになります。

私は as2 に精通していませんが、as3 では、パッケージ レベルでthisキーワードを使用してグローバル オブジェクトにアクセスできます (おそらく as2 も同じです。パッケージ レベルでの設定について心配する必要はありません)。

于 2009-01-26T21:47:05.223 に答える