2016-01-26 2 views
1

В моем приложении HTA я использую окно календаря JavaScript, оно открывается с помощью window.open() и закрывается с помощью window.close(), когда пользователь нажимает на один из даты. Этот календарь отлично работает в нескольких браузерах и версиях более 10 лет. Он работает даже в приложениях HTA большую часть времени.window.close не закрывающее окно в приложении HTA

Однако на конкретных рабочих станциях работает IE11. Команда window.close() просто игнорируется, в результате окно остается открытым. На других рабочих станциях IE11 он работает нормально. Я решил, что при отключении флажка «Включить защищенный режим» на вкладке «Свойства обозревателя» IE11 «Безопасность» устранена проблема на одной из проблемных рабочих станций. Тем не менее, другие рабочие станции прекрасно работают с включенной настройкой и отключением этой настройки не является приемлемым решением.

образец

код, который воспроизводит проблему:

приложения HTA ​​

<HTML> 
<HEAD> 
<HTA:APPLICATION ID="OpenCloseExample" BORDER="thick" BORDERSTYLE="complex"/> 
<TITLE>Open Close HTA container</TITLE> 
</HEAD> 
<iframe width="1024px" height="768px" src="http://localhost:28080/openclose.html"/> 
</HTML> 

openclose.html

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Main Page</title> 
    <script src="openclose.js"></script> 
</head> 
<body> 
    <a href="#" onclick="openWindow();">open</a> 
</body> 
</html> 

openclose.js

var win; 

function openWindow() { 
    win = window.open("", "_blank", 'width=250,height=250,status=no,resizable=no,location=no,top=100,left=100'); 
    win.document.writeln("<html><head><script src='openclose.js'></script></head><a href='#' onclick='javascript:window.opener.closeWindow()'>close</a></html>"); 
} 

function closeWindow() { 
    win.window.close(); 
} 

ответ

1

Я не могу видеть это работает в любой IE с любыми настройками. Проблема заключается в этой строке: <script src='openclose.js'></script>. То есть, буквальный конец тега скрипта в строке работает как тег конца сценария на странице, когда HTML-парсер найдет его. Это означает, что ваш скрипт никогда не был загружен.

Чтобы исправить это, вы, чтобы сломать буквальный тег, например так:

<script src='openclose.js'><\/script>

+0

Мой сценарий отлично работает в IE нет необходимости экранировать символ «/», насколько я могу судить. Во всяком случае, это всего лишь образец кода, который воспроизводит проблему, и этот код намного сложнее. – lyaffe

+0

Уже выяснилось, что это связано с тем, что он работает как обычный пользователь, который страдает от проблемы с администратором, которая работает нормально. Необходимо выяснить, какие конкретные настройки вызывают поведение. – lyaffe

0

Поскольку вы указали, что IE11 является причиной JS не работает, вы можете заставить IE для рендеринга в старой версии очень легко.

<meta http-equiv="X-UA-Compatible" content="IE=9"> 

Этот мета-тег является очень популярным среди HTA приложений для использования JS/ActiveX методы/свойства в конкретных версиях IE (большинство из них не рекомендуется).

Для получения дополнительной информации посетите X-UA-Compatible Tag Wiki

Надеюсь, это поможет

1

Я понял это в конце концов. Изменение:

<a href="#" onclick="openWindow();">open</a> 

к:

<a href="javascript:openWindow()">open</a> 

решил проблему