У нас есть стороннее веб-приложение, которое работает в IE6, но не работает в IE8.
Пример кода, как показано ниже, сообщение «message from .htc» появится в IE6, но невсплывающее окно в IE8.
test.html
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'/>
<script type='text/javascript'>
//if comment the following line, or move this script in <body>,
//then HTC will work in IE8
document.write ("<h1>document.write() in <head></h1> some calendar codes");
</script>
</head>
<body style='behavior:url(test.htc)'>
HTML Components test
</body>
</html>
test.htc
<script type='text/javascript'>
alert ("message from .htc");
</script>
Почему это произошло?Любые совместимые документы, чтобы объяснить это?
Решение
Как сказал @Quentin или другой эксперт из http://social.msdn.microsoft.com/Forums/en-US/iewebdevelopment/thread/c1f546f6-d7e1-4b46-a1c9-8f02eaf1286b, IE8, вероятно, строго устанавливает правилапо сравнению с IE6, и IE8 может рассматривать его как поврежденный HTML-документ.
Итак, я решил использовать document.createElement
для динамического создания элементов вместо document.write
, и вставьте эти элементы в DOM через несколько секунд .После некоторых тестов он наконец заработал как в этом test.html, так и в реальном приложении.
test-ie8-compatibility.html
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'/>
<script type='text/javascript'>
function Delay_CreateCalendar()
{
var oContainer = document.createElement ("div");
var oCalendarIFrame = document.createElement ("iframe");
oContainer.appendChild (oCalendarIFrame);
document.body.insertBefore (oContainer);
}
setTimeout (Delay_CreateCalendar, 2000);
</script>
</head>
<body style='behavior:url(test.htc)'>
dhtml HTC 测试
</body>
</html>