2013-04-17 4 views
0

Ну друзей, сценарий очень сложен:Настройка фокуса для TextInput на встроенном гибкого веб-приложения из приложения Air

У меня есть приложение воздуха и внутри него у меня есть компонент HTML работает с гибкого веб-приложения, и я необходимо установить фокус на textinput в два момента. Компонент HTML находится внутри панели, и это находится внутри stackview

1.- Когда я выбираю индекс стека, где находится компонент HTML, и панель отправляет полное событие. Ну, я решить эту проблему путем изменения 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-содержимое отправляет событие hide. Если я вернусь к индексу, где HTML - это Панель, которая содержит отправку HTML события show. Внутри обработчика события show я посылаю команду веб-приложению, используя localConnection, чтобы восстановить фокус на компонент textInput, вызывая ту же функцию javascript, которая отлично работает при загрузке страницы (onload = "setInitialFocus()").

Приложение для внутреннего использования: защищенное созданиеComplete_Handler (событие: событие): 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"); 
} 

Внутри веб-приложения: общественного creationComplete_handler (событие: Event): пустота { localConnection.allowInsecureDomain ("приложение # chevronLocstattDesktop"); localConnection.client = this; localConnection.connect ("_ SomeConnection"); }

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

Javascript функция выполняется хорошо (потому что я добавить предупреждение внутри него, и это было показано), но не фокус не уделяется веб-приложение, и поэтому не фокус не уделяется TextInput, который все цели это.

Пожалуйста, помогите мне ...

ответ

0

Прямо сейчас я нашел решение:

на HTML обертку для веб-приложения добавить еще одну функцию

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

на применении воздуха:

Inside компонент, который имеет компонент HTML, в обработчике события hide я вызываю функцию javascript, называемую unsetInitialFocus. Это отключает флаг для html-оболочки, заставляя его потерять фокус, и в следующий раз при вызове функции setInitialFocus будет сконфигурирован фокус.

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

Это очень сложно понять, но если кому-то нужна дополнительная помощь, пожалуйста, спросите.

1

1. Создайте функцию Javascript внутри вашего index.template.HTML;

<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);