2

navigateToURLサーバーからのファイルのダウンロードに使用しています。navigateToURLブラウザのダウンロードダイアログが開いたときのように、いつ終了 したかを知ることはとにかく可能ですか?

完了までに 5 秒かかる場合があり、ユーザーが混乱してサイコパスのようにダウンロード ボタンをクリックし始めると、複数のダウンロード ダイアログが開かれる可能性があります。

終了する前に、「しばらくお待ちください」というテキストなどを追加したい (すでにあるので、停止するタイミングを知る必要があるだけです)。
多分それはjavascriptを使ってから情報を得ることができますExternalInterfaceか?

4

3 に答える 3

1

これはちょっとクレイジーですが、他の方法は考えられません。キーを弱参照するように設定されたディクショナリにリクエストオブジェクトを配置し、キーが削除されたかどうかを間隔で確認できます。

ただし、最初に何が起こるかはわかりません。SWF 自体が破棄されるか、辞書が消去されるかのどちらかです。また、関数が 1 回限りのものであるため、リクエスト オブジェクトへの参照が削除されない可能性もあります。これは、SWF 全体と一緒に削除されると想定されるためです。

私が知っているもう1つのことは、キャッチされていないエラーイベントがからのイベントをキャッチすることですnavigateToURL-あまり役に立ちませんが、少なくともそれが機能しなかった場合の兆候を示す可能性があります.

考えられるもう 1 つの簡単な方法は、ボタンを 1 ~ 2 秒間無効にすることです。それが機能した場合、誰も遅延に気付かず、そうでない場合は、あまり頻繁に押すことができません.

private var _requestStore:Dictionary = new Dictionary(true);
private var _timer:Timer = new Timer(10);
. . .
_timer.addEventListener(TimerEvent.TIMER, timerHandler);
. . .
public function openURL(url:String):void
{
    var request:URLRequest = new URLRequest(url);
    _requestStore[request] = true;
    _timer.start();
    navigateToURL(request);
}

private function timerHandler(event:TimerEvent):void
{
    var found:Boolean;
    for (var o:Object in _requestStore)
    {
         found = true;
         break;
    }
    if (!found) // the request got disposed
}
于 2012-06-11T19:30:42.550 に答える
0

navigateToURL は完了イベントを発生させません。Adobe のヘルプ ドキュメントからこのイベントを使用してみてください。

public function URLRequestExample() {
        loader = new URLLoader();
        configureListeners(loader);

        var request:URLRequest = new URLRequest("XMLFile.xml");
        try {
            loader.load(request);
        } catch (error:Error) {
            trace("Unable to load requested document.");
        }
    }

    private function configureListeners(dispatcher:IEventDispatcher):void {
        dispatcher.addEventListener(Event.COMPLETE, completeHandler);
        dispatcher.addEventListener(Event.OPEN, openHandler);
        dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);
        dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
        dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
        dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
    }

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/URLRequest.html#includeExamplesSummary

于 2012-06-11T19:34:42.373 に答える
0

ブラウザのダウンロードダイアログが開いたときのように、navigateToURLがいつ終了したかを知ることは可能ですか?

いいえ、ありません。ブラウザにリクエストを渡すと、Flash Player はそれを制御したりアクセスしたりできなくなります。

考えられる解決策の一部として ExternalInterface の使用について言及されていますが、ダウンロードが完了したことを HTML/JavaScript ページでどのように知るのでしょうか?

于 2012-06-11T19:31:16.020 に答える