在Air应用程序的嵌入式Flex Web应用程序上将焦点设置为textInput

时间:2013-04-17 19:24:01

标签: flex web air focus

好朋友,情景非常复杂:

我有一个空中应用程序,在其中我有一个运行flex web应用程序的HTML组件,我需要在两个时刻关注textinput。 HTML组件位于Panel内部,它位于stackview

1.-当我选择HTML组件所在的stackview索引时,Panel会调度complete事件。     好吧,我通过修改flex 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将焦点恢复到textInput组件,通过调用在加载页面时工作正常的相同javascript函数(onload =“setInitialFocus()”)将命令发送到Web应用程序。

内部空气应用:      protected 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");
 }

内部网络应用:      public creationComplete_handler(event:Event):void {          的LocalConnection.allowInsecureDomain( “应用程序#chevronLocstattDesktop”);          localConnection.client = this;          使用LocalConnection.connect( “_ SomeConnection”);      }

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

javascript函数执行得很好(因为我在其中添加了一些警告并且显示了它)但是没有关注web应用程序,因此没有关注textInput,这就是这个的全部目标。

请帮帮我......

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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();
}

理解它看起来很复杂,但如果有人需要更多帮助,请询问。