2013-03-30 2 views
0

자바 스크립트로 작성된이 두 스크립트가 다른 방식으로 동작하게 만드는 이유가 무엇인지 이해할 수 없습니다. 난시피 (다음 function f1(), f2()을 실행할 경우닫힌 팝업 창을 다시 열려고 시도합니다

스크립트 1

var w; 
function f1() { 
    w = window.open("pg1.html","wind","left=0,top=0,width=480,height=480"); 
} 
function f2() { 
    w.close(); 
} 
function f3() { 
    w.open("pg1.html","wind","left=0,top=0,width=480,height=480"); 
} 

스크립트 2

function f() { 
    var w = window.open("pg1.html","wind","left=0,top=0,width=480,height=480"); 
    w.close(); 
    w.open("pg1.html","wind","left=0,top=0,width=480,height=480"); 
} 

스크립트 (1)의 경우, f1() 새로운 윈도우 객체를 생성하고 참조를 할당 그 객체를 변수 w에 넣고 f2()은 창 객체를 닫고 (f1()) 닫고 팝업 창을 닫은 후 f3() 함수를 실행합니다. (w)가 열리지 않습니다 및 Firefox 19에서 나는 오류 얻을 :

The object invoked has disconnected from its clients,

크롬 25에서 나는 오류를 얻을 : IE8에서

Error: NS_ERROR_NOT_AVAILABLE: Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIDOMJSWindow.open],

내가 오류가 발생합니다. 스크립트 2의

실행 (새 창 객체를 생성 function f()가 생성 창을 닫습니다, 변수 w 해당 개체에 대한 참조를 할당 한 다음 다시 시도) 브라우저에서 오류가 발생하지 않습니다,하지만 파이어 폭스에서 f() 만든다 닫힌 팝업 창이 다시 열리 며 IE와 Chrome에서는 팝업 창이 닫히지 않습니다 (w).

이 두 스크립트를 사용해보고 이러한 비정상적인 동작의 이유를 이해하는 데 도움이 될 수 있습니까?

답변

1

첫째로, 나는 당신이 그 질문이 함축하고있는 것을하기까지는하지 않기를 바랍니다. 다음, 나는 불을 지르고 콘솔에서 다음을 실행하고 샘플 2, 3에 대해 서로 다른 참조 가지고 :

console.log('sample 1', w); // undefined 
f1(); 
console.log('sample 2', w); // Window about:blank 
f2(); 
console.log('sample 3', w); // Window 

w.close();가 새 창에 대한 참조를 파괴 나타납니다.

+0

크롬에서 오류가 발생하지 않은 이유는 --allow-file-from-file 플래그가있는 Chrome을 실행했기 때문입니다. 이 플래그가 없으면'f1()'과'f2()'가 실행 된 후에'f3()'을 실행하려고 할 때 크롬에서 다음과 같은 오류 메시지가 나타납니다 : Uncaught TypeError : Object [object global] 'open'메서드가 없습니다. 하지만 왜 script2 (함수'f()')를 실행할 때 Firefox가 닫힌 창을 다시 열어 줍니까? – user2227119

+0

+1 ... "질문에 의미하는 것" – Algorath

관련 문제