sitelink1 http://zinever.tistory.com/3 
sitelink2  
sitelink3  
sitelink4  
extra_vars4  
extra_vars5  
extra_vars6  

오류:호출자(서버 응용 프로그램이 아닌 서버)가 사용될 수 없어서 사라졌습니다. 모든 연결이 올바르지 않습니다. 호출이 실행되지 않았습니다.



opener 와 popup 창간에 변수를 참조하는 경우, 두 창 모두 열려 있는 상태라면 특정 변수를 참조 하는데 별다른 문제가
없는데, 만약 popup창을 닫는 동작과 함께 popup창에서 특정 변수, 객체를 opener로 전달 할때에는 브라우져 마다 각각 다르게 동작한다.

<브라우저별 전달방식>

   기본 변수 (integer, string등)  참조 변수 (Object)  Function
 Internet Explorer  값 전달  참조 전달   참조 전달 
 FireFox  값 전달  값 전달  참조 전달
 Chrome  값 전달  값 전달  참조 전달
 Safari  값 전달  값 전달  참조 전달
 Opera  값 전달  값 전달  값 전달

popup 의 전역 window 컨텍스트가 유효한 상태라면 값 전달이든, 참조 전달이든 opener 와 popup간에 모든 함수와 변수들에 접근 할수 있지만 popup이 close 되고 난 후에는 opener에 어떤 방식으로 변수나, 객체가 전달 되었는지에 따라서 popup에서 전달된 값의 사용 유무가 결정 된다.

* 특이한 점은 Opera 브라우저는 Function 도 값 전달 처럼 동작 한다. popup 이 닫힌 후에도 popup에서 전달된 함수를 실행 시킬수 있다.

<예제 코드>
opener.html
<html>
<head>
<script>
var openerVar = "opener: variable";
var openerObj = {
 result:'opener: object'
};
function openerFunc(){
 alert('opener function');
}

function useVar(){
 alert(openerVar);
}
function useObj(){
 alert(openerObj.result);
}
function useFunc(){
 openerFunc();
}
function setVariable(rs){
 openerVar=rs;
}
function setObject(rs){
 openerObj=rs;
}
function setFunction(rs){
 openerFunc = rs;
}
function openWin(){
 popupWin = window.open('popup.html', '', 'width=300,height=300');
}
function checkPopup(){
 alert(popupWin.Global);
}
</script>
<body>
<ul>
 <li><a href="javascript: openWin(">팝업창 열기</a></li>
 <li><a href="javascript: checkPopup(">팝업창 확인</a></li>
 <li><a href="javascript: useVar(">변수 확인</a></li>
 <li><a href="javascript: useObj(">객체 확인</a></li>
 <li><a href="javascript: useFunc(">함수 확인</a></li>
</ul>
</body>
</html>


popup.html
<html>
<head>
<script>
var Global = "POPUP WINDOW";
var popupVar = "popup : variable;
var popupObj = {result:'popup: object'};
function popupFunc(){
alert('popup Function');
}
function setOpener(){
opener.setVariable(popupVar);
opener.setObject(popupObj);
opener.setFunction(popupFunc);
window.close();
}
</script>
<body>
<a href="javascript: setOpener(">Opener에 값 전달</a>
</body>
</html>


Internet Explorer에서 popup에서 객체(Object)를 opener에 전달 하고 popup을 닫아 버린후 opener에서 해당 객체에 접근하면 아래와 같은 에러를 볼 수 있다. 


p.jpg



Function까지는 아니더라도 객체를 전달 할때에는 Internet Explorer와 호환을 위해서 객체 자체를 바로 전달 하지 않고,
객체를 String으로 opener에 전달한 후 opener에서 해당 String을 eval 함수로 평가한 후 사용 하면 된다.
전달객체가 복잡한 자료 구조일 경우에는 사용하기가 번거로울 수도 있지만...ㅜㅜ;

<객체를 String 형식으로 전달 하는 방법>
opener.html

function setObjectString(rs){
openerObj=eval('(' + rs + ')');
}

popup.html

var strObj = "{result:'popup: string object'}";

function setOpener(){
opener.setObjectString(strObj);
window.close();
}


위와 같은 방법으로 function 까지 opener에 전달 할수 있다...
Ajax를 사용할 때 응답결과를 JSON으로 받아서 처리 하는 것과 유사 한데.. 조금 응용하면 Java의 RMI를 유사하게 흉내 낼 수 있을 것 같다. javascript 함수를 HTML이나, .JS 파일에 정의된 함수를 사용 하는 것이 아니라, 필요 할 때마다 서버측에서 필요한 함수를 요청해서 사용 하는 형태로...
번호 제목 글쓴이 날짜 조회 수
166 XMLHttpRequest.setRequestHeader 황제낙엽 2013.09.30 407
165 HTTP Content-Type 정리 황제낙엽 2013.09.30 431
164 getBoundingClientRect in FF3 file 황제낙엽 2013.01.11 409
163 연속해서 스트림 받기 (flush data from servlet to jsp with ajax) 황제낙엽 2013.01.04 2814
162 Stack (스택) 예제 프로그램 황제낙엽 2012.12.27 387
161 상속과 Super 로의 접근 황제낙엽 2012.09.18 380
160 inherits() 를 이용한 상속 황제낙엽 2012.07.18 412
159 Javascript delete 황제낙엽 2012.06.11 421
158 delete 연산자에 대한 고찰 황제낙엽 2012.06.11 438
157 자바스크립트의 쉬프트 연산자 (Shift Operator) 와 음수 (Negative) 이야기 황제낙엽 2012.05.31 1052
156 연산자 (===, ==, >=, <=) 황제낙엽 2012.05.30 391
155 XMLHttpRequest 의 이벤트 onreadystatechange 황제낙엽 2012.05.30 673
154 JavaScript 재입문 황제낙엽 2012.05.29 372
153 진행 상황 추적하기(XMLHttpRequest.readyState) file 황제낙엽 2012.05.23 637
152 JavaScript Touch and Gesture Events iPhone and Android 황제낙엽 2012.04.12 750
151 Javascript ArrayBuffer ? Binary handling in javascript 황제낙엽 2012.03.19 724
» 오류:호출자(서버 응용 프로그램이 아닌 서버)가 사용될 수 없어서 사라졌습니다. file 황제낙엽 2012.03.14 2190
149 Alert 에서의 개행처리 황제낙엽 2012.03.09 397
148 env.js 사용시 부족한 부분 file 황제낙엽 2012.02.15 334
147 Rhino 와 env.js 를 사용해서 자바 서버에서 javascript 를 구동해보자 file 황제낙엽 2012.02.15 398