Проблема Backspace в приложении Flex в IE 8 и IE 11

Эта проблема хорошо известна тем, что в IE по какой-то безумной причине Backspace используется для возврата к предыдущей навигации по истории. В гибких веб-приложениях иногда появляется эта ошибка Microsoft, и решить ее прозрачным и простым способом очень сложно.

Обычно эта проблема возникает, когда вы редактируете текст и текстовую область или текстовый ввод находится внутри контейнера TabNavigator, или вы редактируете текст, а текстовая область находится внутри всплывающего окна.


person Yury Euceda    schedule 30.04.2015    source источник
comment
Это не просто IE; Firefox делает то же самое, по крайней мере, в моей системе (Windows 7 64 бит)   -  person Brian    schedule 30.04.2015
comment
Аналогичный вопрос: stackoverflow.com/questions/1495219/   -  person Brian    schedule 30.04.2015
comment
Я не понимаю, почему, Брайан, ты занижаешь мой вопрос, если моя единственная цель — поделиться тем, что я нашел. Что я чувствую, так это ничего не постить здесь. Если я публикую это, потому что я нашел это полезным для себя, и я думаю, что я был бы для других.   -  person Yury Euceda    schedule 01.05.2015
comment
Это отличается от вопроса, на который ссылается Брайан. Обработка событий Flex/Flash отличается от чистого JS.   -  person Glenn    schedule 15.09.2015


Ответы (2)


У меня есть лучший ответ на эту проблему. Ответ Юрия не помог в моем случае. Что помогло, так это редактирование файла adobe history.js:

В верхней части файла они проверяют пользовательский агент:

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

Я заметил, что он не распознает Internet Explorer, так как агент пользователя теперь говорит «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 или меньше.

person Glenn    schedule 24.09.2015

Что ж, решение — совмещение двух работ.

Первый — небольшое изменение javascript в вашем файле index.template.html в вашем проекте (Flash Builder) или конечном html.

<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()">

И второе — очень небольшое изменение в вашем проекте. Вам нужно изменить на false свойство с именем historyManagementEnabled во всех компонентах TabNavigator внутри вашего проекта.

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

Обратите внимание на компоненты Accordion и ViewStack‹---TabNavigator, поскольку они реализуют IHistoryManagementClient, как описано http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/managers/IHistoryManagerClient.html.

person Yury Euceda    schedule 30.04.2015