0

友よ、シナリオは非常に複雑です。

Air アプリケーションがあり、その中に flex Web アプリケーションを実行する HTML コンポーネントがあり、テキスト入力に 2 回でフォーカスを設定する必要があります。HTML コンポーネントは Panel 内にあり、これはスタックビュー内にあります

1.- HTML コンポーネントがあるスタックビュー インデックスを選択すると、Panel が complete イベントをディスパッチします。さて、これを解決するには、フレックス Web アプリの html ラッパーを変更して、次のようなコードを追加します。

<script languaje="javascript" type="text/javascript">
    function setInitialFocus() {
       document.getElementById('${application}').tabIndex = 0;
       document.getElementById('${application}').focus();
    }
</script>

<body scroll="no" onload="setInitialFocus()">

2.- 次は間違っています。stackview から別のインデックスを選択すると、HTML が存在する Panel が hide イベントをディスパッチします。HTML があるインデックスに戻ると、HTML を含む Panel が show イベントをディスパッチします。show イベント ハンドラー内で、localConnection を使用して web アプリケーションにコマンドを送信し、ページが読み込まれたときに正常に動作する同じ JavaScript 関数 (onload="setInitialFocus()") を呼び出して、フォーカスを textInput コンポーネントに復元します。

インサイドエア アプリ: 保護された creationComplete_Handler(event:Event) : void { localConnection = new LocalConnection(); localConnection.addEventListener(StatusEvent.STATUS, localConnection_onStatus); localConnection.connect("some.domain.com"); }

 protected function show(event:FlexEvent) : void {
     localConnection.send("_someConnection","executeJavaScript");
 }

Web アプリ内: public creationComplete_handler(event:Event) : void { localConnection.allowInsecureDomain("app#chevronLocstattDesktop"); localConnection.client = これ; localConnection.connect("_SomeConnection"); }

 public function executeJavaScript() : void {
   ExternalInterface.call("setInitialFocus");
   textInput.setFocus();
 }

javascript関数はうまく実行されますが(内部にアラートを追加して表示されたため)、Webアプリケーションにフォーカスが与えられていないため、このすべての目標であるtextInputにフォーカスが与えられていません。

私を助けてください...

4

2 に答える 2

1

1. index.template.html 内に Javascript 関数を作成します。

<script language="JavaScript" type="text/javascript" >
<!--
function setFocus()
{
    window.document.YourSite.focus();
}

// -->
</script>

PS: "YourSite" を SWF ムービーの名前に置き換えます。

2.作成完了メソッドに挿入します。

if (ExternalInterface.available) {
        ExternalInterface.call('setFocus');
    } else {
        Alert.show("Browser not available");
    }

    focusManager.setFocus(yourTextInput);
于 2013-06-09T15:02:07.497 に答える
0

今、私は解決策を見つけました:

Webアプリケーションのhtmlラッパーに別の機能を追加

<script languaje="javascript" type="text/javascript">
    function unsetInitialFocus() {
       document.getElementById('${application}').tabIndex = 0;
       document.getElementById('${application}').blur();
    }
</script>

オンエア アプリケーション:

HTML コンポーネントを含むコンポーネント内で、hide イベント ハンドラで unsetInitialFocus という JavaScript 関数を呼び出します。これにより、html ラッパーへのフラグがオフになり、強制的にフォーカスが失われ、次に関数 setInitialFocus が呼び出されたときにフォーカスが構成されます。

protected function hide(event:FlexEvent) : void {
   HTMLViewer.htmlLoader.window.unsetInitialFocus();
}

理解するのは非常に複雑に見えますが、さらにヘルプが必要な場合はお尋ねください。

于 2013-04-17T19:47:03.210 に答える