1

これはおそらく簡単な質問になるでしょうが、オンラインで検索しても答えが見つからないようです。

次の簡単なコードを使用しています。

var fileReferenceList:FileReferenceList = new FileReferenceList();
fileReferenceList.addEventListener(Event.SELECT, onSelect);
fileReferenceList.browse();

大きなフラッシュ ボタンがこのコードをトリガーします。これは完全に正常に機能します。残念ながら、ファイルを参照するダイアログ ボックスが開いている間はボタンをクリックできないように強制していないため、「エラー: エラー #2041: 一度に実行できるファイル参照セッションは 1 つだけです。」というメッセージが表示されます。ポップアップダイアログボックスが表示されている間にボタンをクリックすると。

私が本当に気に入っているソリューションは、Google Docs のソリューションです。ポップアップ ダイアログ ボックスが表示されている間は、[アップロードするファイルを選択] の上にあるボタンをクリックできません。実際には、このダイアログ ボックスには一種の優先順位があります。ファイルを選択するか、このダイアログ ボックスでキャンセルする前に、ページのどこかをクリックすることはできません。

Google ドキュメントと同じように、このダイアログ ボックスが完了するまで、ユーザーが Web ページのどこをクリックしても同じように動作させたいのですが、方法がわかりません。

どなたか手がかりをお願いします。

どうもありがとうございました、

ルディ

4

2 に答える 2

1

SWF を埋め込んだ HTML ファイルを確認してください。Windows/Firefox では、HTML ページの EMBED タグで使用するウィンドウ モード (wmode) によって、「ファイルの選択」ダイアログの動作が異なります。

wmode="opaque" または wmode="transparent" を使用すると、「ファイルの選択」ダイアログはモーダルにならず、ブラウザ ウィンドウ自体をクリックして前面に表示できます。(また、ブラウザ ウィンドウを最小化することもできます)。これは Windows/Firefox にのみ適用されるようです。他のブラウザはすべて、「ファイルの選択」ダイアログを一番上に置いているように見えます。

wmode 属性を省略した場合 (デフォルトは「window」)、または「direct」または「gpu」に設定した場合、「ファイルの選択」ダイアログはモーダルになります。

モーダル「ファイル選択」ダイアログ:

<embed src="Upload.swf" 
       wmode="window"
       quality="best" 
       scale="noscale" 
       swliveconnect="true" 
       salign="lt" 
       width="220" height="75" bgcolor="#ffffff" 
       type="application/x-shockwave-flash" 
       pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>

非モーダル「ファイル選択」ダイアログ:

<embed src="Upload.swf" 
       wmode="opaque"
       quality="best" 
       scale="noscale" 
       swliveconnect="true" 
       salign="lt" 
       width="220" height="75" bgcolor="#ffffff" 
       type="application/x-shockwave-flash" 
       pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
于 2012-10-30T00:17:44.067 に答える
0

Google ドキュメントのブラウズ ダイアログは「モーダル」です (つまり、ダイアログが表示されている間は、フォーカスを他に移動することはできません)。私の知る限り、FileReference ダイアログ ボックスはデフォルトでモーダルになっているはずです。これをどのブラウザでテストしていますか?

回避策として、ダイアログが表示されている間、ステージ全体に透明な (または調光効果のために半透明の) オーバーレイを配置できます。これにより、フォーカスの変更が妨げられることはありませんが、ステージ上の他のボタンがクリックされなくなります。たとえば、次のようなクラスです。

public class Overlay extends Sprite
{
    private static const BACKGROUND_OPACITY:Number = 0.40;

    public function Overlay(_stage:Stage)
    {
        graphics.beginFill(0x000000, BACKGROUND_OPACITY);
        graphics.drawRect(0, 0, _stage.stageWidth, _stage.stageHeight);
        graphics.endFill();
    }
}

これは次のように使用されます (ドキュメント クラスから):

private var overlay:Overlay;

public function onButtonClick(e:MouseEvent):void
{
    overlay = new Overlay(stage);
    stage.addChild(overlay);

    // ...

    fileReference.browse();

    // ...
}


public function onSelect(e:Event):void
{
    stage.removeChild(overlay);     // Also do this on cancel, and on errors
}
于 2010-06-28T17:21:57.017 に答える