고객사로부터 DxIESaver 제품 관련하여 문의를 받았습니다.
그 문의에서 발견한 IE의 버그라고 해야 할까요.
제목에서 밝힌 것처럼, setTimeout(setInterval도 같은 문제가 있을 듯.) 메서드가 vbscript에서 사용될 때 해당 HTML 페이지에서 jscript 블럭이 있을 때 무조건 오류가 발생됩니다.
Internet Explorer의 내부 스크립트 엔진의 문제이니 만큼 원인에 대한 직접적인 파악은 할 수 없으므로, 다양하게 테스트한 현상만을 나열해 보겠습니다.
아래에 연이어 나오는 구문들 중에서 오류 발생 시 나타나는 대화창은 다음과 같습니다.
"
A Runtime Error has occurred.
Do you wish to Debug?
Line: 0
Error: 개체가 이 속성 또는 메서드를 지원하지 않습니다.
"
---------- 현상1: test.html ------------
조건: 상단에 jscript가 위치하고 하단에 vbscript가 위치.
vbscript 안에서 setTimeout 메서드를 호출
결과: 오류 발생
----------------------------------------
<script language="jscript">
// 실행 코드의 유무에 상관없이.
</script>
<script language="vbscript">
Sub window_onload()
window.setTimeout "TestSub", 1000
End Sub
Sub TestSub
' 실행 코드의 유무에 상관없이.
End Sub
</script>
---------- 현상2: test.html ------------
조건: 위의 "현상1"에서 상단의 jscript를 vbscript 밑으로 복사한 경우
결과: 정상 동작
----------------------------------------
<script language="vbscript">
Sub window_onload()
window.setTimeout "TestSub", 1000
End Sub
Sub TestSub
' 실행 코드의 유무에 상관없이.
End Sub
</script>
<script language="jscript">
// 실행 코드의 유무에 상관없이.
</script>
---------- 현상3: test.html ------------
조건: 상단에 vbscript가 위치하고 하단에 jscript가 위치.
jscript 안에서 setTimeout 메서드를 호출
결과: 정상 동작
----------------------------------------
<script language="vbscript">
' 실행 코드의 유무에 상관없이.
</script>
<script language="jscript">
function window.onload()
{
window.setTimeout( "TestFunc", 1000 );
}
function TestFunc()
{
// 실행 코드의 유무에 상관없이.
}
</script>
---------- 현상4: test.html ------------
조건: 상단에 jscript가 위치하고 하단에 vbscript가 위치.
vbscript의 window_onload 메서드가 아닌,
버튼의 click 이벤트에서 setTimeout 메서드를 호출
결과: 오류 발생
----------------------------------------
<script language="jscript">
// 실행 코드의 유무에 상관없이.
</script>
<script language="vbscript">
Sub TestSub
' 실행 코드의 유무에 상관없이.
End Sub
Sub BtnClick
window.setTimeout "TestSub", 1000
End Sub
</script>
<input type=button onclick="BtnClick()" value="확인"></input>
---------- 현상4: test.html ------------
조건: vbscript에서 setTimeout 인자로 넘어갈 함수를 jscript의 것으로 넘겨주는 경우.
결과: 오류 화면은 나오지 않지만, TestSub 함수는 실제로 실행되지 않음.
----------------------------------------
<script language="javascript">
// 실행 코드의 유무에 상관없이.
function TestSub()
{
alert( "TEST" );
}
</script>
<script language="vbscript">
Sub BtnClick
window.setTimeout "TestSub", 1000
End Sub
</script>