1. 아래 내용의 스크립트를 추가한다.
첫번째줄은 브라우저가 ie 일때만 사용자 정의 Worker 를 사용하려고 넣었다.
if(window.navigator.userAgent.toLowerCase().indexOf('trident') > -1 || window.navigator.userAgent.toLowerCase().indexOf('MSIE') > -1)
{
var Worker = function ( scriptFile )
{
console.log('익스플로어 워커다');
var self = this ;
var __timer = null ;
var __text = null ;
var __fileContent = null ;
var onmessage ;
self.onerror = null ;
self.onmessage = null ;
// child has run itself and called for it's parent to be notified
var postMessage = function( text )
{
if ( "function" == typeof self.onmessage )
{
return self.onmessage( { "data" : text } ) ;
}
return false ;
} ;
// Method that starts the threading
self.postMessage = function( text )
{
__text = text ;
__iterate() ;
return true ;
} ;
var __iterate = function()
{
// Execute on a timer so we dont block (well as good as we can get in a single thread)
__timer = setTimeout(__onIterate,1);
return true ;
} ;
var __onIterate = function()
{
try
{
if ( "function" == typeof onmessage )
{
onmessage({ "data" : __text });
}
return true ;
}
catch( ex )
{
if ( "function" == typeof self.onerror )
{
return self.onerror( ex ) ;
}
}
return false ;
} ;
self.terminate = function ()
{
clearTimeout( __timer ) ;
return true ;
} ;
/* HTTP Request*/
var getHTTPObject = function ()
{
var xmlhttp;
try
{
xmlhttp = new XMLHttpRequest();
}
catch (e)
{
try
{
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
xmlhttp = false;
}
}
return xmlhttp;
}
var http = getHTTPObject()
http.open("GET", scriptFile, false)
http.send(null);
if (http.readyState == 4)
{
var strResponse = http.responseText;
//var strResponse = http.responseXML;
switch (http.status)
{
case 404: // Page-not-found error
alert('Error: Not Found. The requested function could not be found.');
break;
case 500: // Display results in a full window for server-side errors
alert(strResponse);
break;
default:
__fileContent = strResponse ;
// IE functions will become delagates of the instance of Worker
eval( __fileContent ) ;
/*
at this point we now have:
a delagate "onmessage(event)"
*/
break;
}
}
self.importScripts = function(src)
{
// hack time, this will import the script but not wait for it to load...
var script = document.createElement("SCRIPT") ;
script.src = src ;
script.setAttribute( "type", "text/javascript" ) ;
document.getElementsByTagName("HEAD")[0].appendChild(script)
return true ;
} ;
return true ;
} ;
}
2. jsp 나 html 파일에서 스크립트를 포함시켜준다.
<script type="text/javascript" src="/ie_worker.js"></script>
3. 이제 사용하던 worker 를 그대로 사용해준다.
worker = new Worker("my_worker.js"); //위의 worker 파일 아님
var sessionTimeout = $("#sessionTimeOut").val();
worker.postMessage(sessionTimeout);
worker.onerror = function(e) {
//로직
}
worker.onmessage = function(e) {
//로직
}
'공부 > Javascript' 카테고리의 다른 글
자바스크립트 세션타임아웃 타이머 만들기 (0) | 2022.09.07 |
---|---|
jQuery 노드찾기 like 검색 (0) | 2022.08.08 |
체크박스 모두 선택, 모두 해제 구현 (0) | 2022.07.15 |
table > tr 클릭 이벤트 특정 td만 적용 안되게 하기 (0) | 2022.02.21 |
특정 문자열을 원하는 문자열로 변경하기 (0) | 2021.10.08 |