友よ、シナリオは非常に複雑です。
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にフォーカスが与えられていません。
私を助けてください...