同時に実行されている 2 つの swf 間でデータを転送する手段として、ローカル共有オブジェクトを使用しています。
so = getLocal("mySO");
// set the value from a user input, and set it to 'connected'
so.setProperty(txtName.text, "connected")
// every few seconds check if the other SWF started and modified value
onTimer
{
var data:Object = so.data
// breakpoint and inspect the data with debugger
}
最後のコメント行が問題の場所です。デバッガーでは、データへの変更は検出されませんが、.sol ファイルを .minerva で検査すると、両方の SWF からの変更が表示されます。したがって、共有オブジェクトは SWF 2 によって変更されますが、SWF 1 はこれらの変更を認識しません。これはどうあるべきか?
ps: 実行中の 2 つの SWF 間の通信に LocalConnection を使用できることはわかっていますが、何らかの制限がある場合は SO について知りたいと思っています。
アップデート:
コンパイルされた Flex アプリをディスクから 2 回実行し、2 回目のテキストフィールドに「swf2」を入力します。両方でスタートを押します。最初に開始されたものは、2 番目のものが接続されたことを決して検出しません。
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
minWidth="955"
minHeight="600"
creationComplete="application1_creationCompleteHandler(event)"
>
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
private var timer:Timer;
private var so:SharedObject;
protected function application1_creationCompleteHandler(event:FlexEvent):void
{
so = SharedObject.getLocal("mySO");
timer = new Timer(1000);
timer.addEventListener(TimerEvent.TIMER, onTimer);
}
protected function button1_clickHandler(event:MouseEvent):void
{
so.setProperty(txtSwf.text, 'connected');
so.flush();
timer.start();
}
protected function onTimer(event:TimerEvent):void
{
so = SharedObject.getLocal("mySO");
txtLog.text += so.data["swf1"] + "\n";
txtLog.text += so.data["swf2"] + "\n";
txtLog.text += "------------ \n";
}
]]>
</fx:Script>
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<s:TextInput id="txtSwf" x="10" y="50" text="swf1"/>
<s:Button x="170" y="50" label="Start" click="button1_clickHandler(event)"/>
<s:TextArea id="txtLog" x="10" y="154" width="279" height="112" />
</s:Application>