Изначально вопрос заключается в том, есть ли у 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
- Internet Explorer в основном используется на моем рабочем месте, и предпочтительно использовать IE для этих файлов.эс.
- У меня нет , влияющих на настройку систем или сети, это просто способ, которым мы смогли добиться некоторой эмуляции системы для обучения с небольшими ресурсами, которые у нас есть.
- Num-Pad ENTER предпочтительнее вызывать функцию, поскольку она более точно имитирует систему.
- Я обнаружил ОЧЕНЬ похожий вопрос здесь , однако он не отвечает на мой /вопрос (я также отлаживал по комментариям, и в консоли разработчика ошибок нет).
В настоящее время используется версия IE: 11.0.9600.19002