Почему onkeypress не вызывает функцию javascript с использованием IE, когда присутствует более одного оператора сравнения - PullRequest
0 голосов
/ 30 мая 2018

Изначально вопрос заключается в том, есть ли у Internet Explorer некоторые проблемы с вызовом сценариев при запуске из сетевого расположения, в частности, моя проблема связана с определенным синтаксисом сценария?

У меня есть группа HTML-файлов, которые эмулируютархаичная система в работе, использующая события onkeypress или onkeydown для вызова функции javascript, указывающей, к какой странице переходить при нажатии определенной клавиши.

Это некоторый сжатый пример кода (для нажатия клавиши num-pad ENTER), который содержит все элементы фактического файла и воспроизводит точную проблему, которую я имею:

<!DOCTYPE html>
<html>
<head>
<style>
body {
    margin: 0;
}
img {
    margin: 0;
    border: 0;
}
</style>
    <script>    
        function nav() {
        var x = event.keyCode; 
        var y = event.location;
            if (x == 13 && y === 3) { 
                document.location = "http://www.google.com.au"
                }
            }
    </script>
</head>
<body onkeypress="nav()">
    <map name="test">
        <area href="http://www.google.com.au" title="Alternate naviagion" shape="rect" coords="131,680,160,705">
    </map>
    <img src="ThisPagesImage.png" alt="" usemap="#test">
</body>
</html>

Если я запускаюфайл с рабочего стола, который он предлагает внизу экрана:

Internet Explorer ограничил использование этой веб-страницы сценариями или элементами управления ActiveX.[Разрешить заблокированное содержимое]

Если я нажимаю «Разрешить заблокированное содержимое», функция вызывается, как и ожидалось, при нажатии ввода с цифровой клавиатуры.

Однако при запуске с сетевого диска нет подсказки, что скрипты или элементы управления ActiveX ограничены и функция не вызывается.(Я также протестировал замену document.location = "http://www.google.com.au" на window.alert("Hello World") на всплывающее окно, появляющееся при запуске с рабочего стола, но не при запуске с сетевого диска.

Поэтому я определил, что по какой-то причине должна быть какая-то сетьнастройки (которые, вероятно, не поддаются моему контролю) предотвращают это.

НО, странно, если мы заменим функцию следующим: проблем вообще не будет:

function nav() {
var x = event.keyCode; 
    if (x == 13) { 
        document.location = "http://www.google.com.au"
        }
    }

TL / DR

Когда html-файл запускается из расположения сетевого диска и функция имеет 2 условия if (x == 13 && y === 3), функция не вызывается, однако, когда функция имеет только одно условие if (x == 13) функция вызывается, как и ожидалось.

Когда html-файл запускается с рабочего стола, IE запрещает сценарии / ActiveX и предлагает разрешить их, и, если разрешено, обе функции успешно вызваны.

NOTE

  1. Internet Explorer в основном используется на моем рабочем месте, и предпочтительно использовать IE для этих файлов.эс.
  2. У меня нет , влияющих на настройку систем или сети, это просто способ, которым мы смогли добиться некоторой эмуляции системы для обучения с небольшими ресурсами, которые у нас есть.
  3. Num-Pad ENTER предпочтительнее вызывать функцию, поскольку она более точно имитирует систему.
  4. Я обнаружил ОЧЕНЬ похожий вопрос здесь , однако он не отвечает на мой /вопрос (я также отлаживал по комментариям, и в консоли разработчика ошибок нет).

В настоящее время используется версия IE: 11.0.9600.19002

1 Ответ

0 голосов
/ 30 мая 2018

Итак, с большой подсказкой в ​​комментариях @ h77 проверить значение y, мы обнаружили, что основной причиной нашей проблемы было то, что IE отображал сайты интрасети в режиме совместимости.

При более пристальном внимании к консоли отладки мы заметили сообщение:

The attached page targets document mode 7. Some console APIs and features may not be available.

Это привело меня сюда который заставил мой мозг признать event.location не будет понят IE7.

Поскольку IE11 работает в режиме совместимости, поскольку IE7 и event.location совместимы с IE9 и выше , это отвечает на вопрос.

Решение этой проблемы при сохранении «Режима совместимости» можно добавить <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> в тег <head>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...