4

これが私が行うことです。「ローカルストレージ」ダイアログで、ポインターを「なし」に設定して、0 kB を許可します。次に、コードを実行します。[許可] ボタンと [拒否] ボタンを含む [ローカル ストレージ] ダイアログが表示されます。[拒否]をクリックします

私が得る出力は

2. we are here now
3. adding a handler to the SharedObject

注: onFlushStatus イベント ハンドラは呼び出されません。

上記のことを繰り返しますが、ここで [許可] をクリックします。私が得る出力は同じです:

2. we are here now
3. adding a handler to the SharedObject

注: onFlushStatus イベント ハンドラは呼び出されません。

ここからコードを使用していました Flex: How to detect if user has blocks shared object from writing

何を試しても (そして、何度も試してみましたが)、[許可] または [拒否] ボタンのクリックでイベント ハンドラーが呼び出されることはありません。しかし、ユーザーがクリックしたボタンを知りたいです。

var so: SharedObject = null;
var flushStatus: String = null;

so = SharedObject.getLocal('mySpace');
try {
  flushStatus = so.flush();
} catch (error: Error) {
  trace('1. could not write SharedObject to disk');
}           
trace('2. we are here now');
if (flushStatus == flash.net.SharedObjectFlushStatus.PENDING) {
  trace('3. adding a handler to the SharedObject');
  so.addEventListener(NetStatusEvent.NET_STATUS, onFlushStatus);
} 

public function onFlushStatus(event: NetStatusEvent): void
{
  trace('4. in event handler');
}      

提案どおり、コードを変更し、flush() を呼び出す前にイベント リスナーを追加しました。次に、テストを再度実行します。残念ながら、私の onFlushStatus() は呼び出されません。

var so: SharedObject = null;
var flushStatus: String = null;

so = SharedObject.getLocal('mySpace');
trace('0. adding a handler to the SharedObject');
so.addEventListener(NetStatusEvent.NET_STATUS, onFlushStatus);
flushStatus = so.flush();
trace('2. we are here now');

public function onFlushStatus(event: NetStatusEvent): void
{
  trace('4. in event handler');
}      

[Deny] の出力

0. adding a handler to the SharedObject
2. we are here now

[Allow] に対して得られる出力

0. adding a handler to the SharedObject
2. we are here now

onFlushStatus() は呼び出されません。

4

1 に答える 1

0

このリンクから、 がコマンドの結果とともに をso.flush返しているように見えます。発生するイベントを探すのではなく、戻り値を確認する必要があります。の場合は、イベント リスナーを追加し、成功/失敗を確認します。Stringflush()pending

良い例:こちら

于 2013-03-20T14:34:08.523 に答える