0

好吧朋友,场景很复杂:

我有一个空中应用程序,在其中我有一个运行 flex Web 应用程序的 HTML 组件,我需要在两分钟内将焦点设置在文本输入上。HTML 组件位于 Panel 内,而这位于 stackview 内

1.- 当我选择 HTML 组件所在的 stackview 索引时,Panel 调度完成事件。好吧,我通过修改 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所在的面板会调度隐藏事件。如果我回到 HTML 所在的索引,那么包含 HTML 的面板会调度 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");
 }

内部网络应用程序: 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 组件的组件内部,在隐藏事件处理程序中,我调用了名为 unsetInitialFocus 的 javascript 函数。这将关闭 html 包装器的标志,强制它失去焦点,并且下次调用函数 setInitialFocus 时,将配置焦点。

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

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

于 2013-04-17T19:47:03.210 回答