2013-05-28 4 views
0

웹 사이트에서 여러 개의 새 탭/창을 열었습니다. 웹 사이트의 기본 페이지에는 '모두 닫기'버튼이있어 웹 사이트에서 열려있는 모든 창을 닫아야합니다. 처음에는 잘 작동하는 것 같습니다. 그러나 주 페이지의 이름은 '모두 닫기'링크를 누를 때 열었던 마지막 페이지로 덮어 씁니다. 그 결과, 마지막으로 열린 페이지가 다시 호출 될 때마다 새 탭에서 열리지는 않지만 주 페이지 탭 (분명히 원하는 것은 아닙니다)에 열립니다.자바 스크립트가 다른 창에서 창을 닫으면 창 이름이 겹쳐서 쓰여집니다.

popupmanager.js :

이 MWE를 참조

function PopupManager() { 
    this.name = "_popupmanager_"; 
    this.windows = {}; 
}; 

PopupManager.prototype.open = function(url, name) { 
    this.windows[name] = window.open(url, name); 
    this.windows[name].focus(); 
}; 

PopupManager.prototype.closeAll = function() { 
    for (name in this.windows) { 
     this.closeWindow(name); 
    } 
}; 

PopupManager.prototype.closeWindow = function(name) { 
    if (this.windows[name]) { 
     this.windows[name].close(); 
     delete this.windows[name]; 
    } 
}; 

메인 페이지의 존재의 index.html을 : 두 번째보다 첫 번째 링크를 클릭 이제

<!doctype html> 

<html> 
<head> 
    <script src="./popupmanager.js"></script> 
    <script> 
     var popupManager = new PopupManager(); 
    </script> 
</head> 
<body> 
    <ul> 
     <li><a href="javascript:popupManager.open('http://www.facebook.be', 'facebook')">facebook</a></li> 
     <li><a href="javascript:popupManager.open('http://www.google.be', 'google')">google</a></li> 
     <li><a href="javascript:popupManager.closeAll()">close all/a></li> 
    </ul> 
</body> 
</html> 

, , 두 페이지가 모두 열립니다. '모두 닫기'를 누르면 모든 것이 잘 작동하는 것 같습니다. 그러나이 시점에서 기본 페이지 탭의 이름은 'google'('closeAll'함수 실행 결과)입니다. 두 번째 링크를 다시 클릭하면 새 탭이 아닌 기본 페이지에서 열립니다. 파이어 폭스 21.0, 구글 크롬 24.0.1312.60m, IE9에서이 동작을 보았는데, 자바 스크립트의 의도 된 동작이라고 생각된다.

메인 페이지의 이름을 덮어 쓰는 이유 및/또는 스크립트가 기본 페이지 탭의 이름을 덮어 쓰지 않는 방법을 알 수 없습니다. 누군가?

답변

0

좋아, 나는 그것을 스스로 해결할 수 있었다. 나는 'closeWindow'함수의 미세 조정을 해왔고 이것은 트릭을 만들었습니다.

PopupManager.prototype.closeWindow = function(name) { 
    if (this.windows[name]) { 
     if (!this.windows[name].closed) { 
      this.windows[name].opener.name="indexpage"; 
      this.windows[name].close(); 
     } 
     delete this.windows[name]; 
    } 
}; 
관련 문제