우리는 IE6에서 작동하지만 IE8에서는 작동하지 않는 타사 웹 응용 프로그램을 가지고 있습니다.document.write가 <head>에서 실행되는 경우 IE8에서 DHTML 동작이 작동하지 않는 이유는 무엇입니까?
샘플 코드는 아래와 같습니다. IE6에서 "message from .htc"메시지가 팝업되지만 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>
<script type='text/javascript'>
alert ("message from .htc");
</script>
이런 일이 왜 test.htc? 이것을 설명하는 모든 호환 가능한 문서?
솔루션
@Quentin 말했다 또는 http://social.msdn.microsoft.com/Forums/en-US/iewebdevelopment/thread/c1f546f6-d7e1-4b46-a1c9-8f02eaf1286b에서 다른 전문가는 IE8은 아마 엄격하게 IE6에 비해 규칙을 만들고, IE8은 손상 HTML 문서로 취급 할 수있다, 말했듯이.
그래서 document.write
대신 동적으로 요소를 생성하고이 요소를 DOM after some seconds delay에 삽입하기 위해 document.createElement
을 사용하기로 결정했습니다. 몇 가지 테스트를 마친 후 마침내이 test.html과 실제 응용 프로그램에서 모두 작동했습니다.
테스트-IE8-compatible.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>
감사합니다. msdn 포럼에서 같은 대답을 얻었습니다. http://social.msdn.microsoft.com/Forums/en-US/iewebdevelopment/thread/c1f546f6-d7e1-4b46-a1c9-8f02eaf1286b, 전 생각합니다. 지연 함수를 사용하여 * 내용을'body '에 동적으로 씁니다. –