IE 8和IE 11上的Flex应用程序中的退格问题

时间:2015-04-30 19:04:29

标签: internet-explorer flex actionscript backspace

这个问题众所周知,在IE中出于某种疯狂的原因,Backspace用于返回历史导航。在flex web应用程序中,有时会出现这个微软错误,并且以透明和简单的方式解决这个问题非常头疼。

通常在编辑文本和textarea或textInput位于TabNavigator容器内或编辑文本时出现此问题,而textarea位于弹出窗口内。

2 个答案:

答案 0 :(得分:2)

我对这个问题有了更好的答案。 Yury的回答对我的案子没有帮助。编辑adobe的history.js文件的帮助是什么:

在文件顶部附近,他们检查了useragent:

} else if (useragent.indexOf("msie") != -1 ) {
    browser.ie = true;
    browser.version = parseFloat(useragent.substring(useragent.indexOf('msie') + 4));

我注意到它没有拿起Internet Explorer,因为useragent现在说“mozilla”而不是msie。

} else if  (useragent.match(/msie|trident|edge/) ) {
        browser.ie = true;
       browser.version = useragent.indexOf('msie') < 0 ? 7 :  parseFloat(useragent.substring(useragent.indexOf('msie') + 4));

我只是将版本设置为7,如果它匹配三叉戟或边缘,因为此版本的adobe代码仅检查7或更少。

答案 1 :(得分:1)

嗯,解决方案是两个工作的组合。

第一个是项目中的index.template.html文件(Flash Builder)或结束的html中的javascript变化。

<script type="text/javascript">
    function init() {
        window.onkeydown = function(e) {
            var event = window.event || e;
            if(event.keyCode==8) {
                document.getElementById('${application}').focus();
                event.returnValue=false;
            }
        };
        setInitialFocus();      
    }

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

<body onload="init()">

第二个是你的项目变化很小。您需要在项目内的所有TabNavigator组件中将名为historyManagementEnabled的属性更改为false。

<mx:TabNavigator historyManagementEnabled="false">
</mx:TabNavigator>

请注意Accordion和ViewStack&lt; --- TabNavigator组件,因为它们实现了IHistoryManagementClient,如http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/managers/IHistoryManagerClient.html所述