일반적인 자바 스크립트는 창을 닫을 수 없습니다. 이것은 여러 악의적 인 악용과 성가심을 막기 위해 얼마 전에 소개 된 보안 기능입니다.
에 대한 최신 작업 사양에서window.close()
:
close()
Window 객체 의 메소드는 다음 조건이 모두 충족되면 브라우징 컨텍스트 A를 닫아야합니다 .
- 해당 브라우징 컨텍스트 A 는 스크립트로 닫을 수 있습니다.
- 기존 스크립트의 브라우징 컨텍스트는 브라우징 컨텍스트 A에 익숙합니다 .
- 기존 스크립트의 브라우징 컨텍스트는 브라우징 컨텍스트 A 를 탐색 할 수 있습니다.
브라우징 컨텍스트는 스크립트에 의해 생성 된 보조 브라우징 컨텍스트 이거나 (사용자의 작업과 반대되는) 브라우징 컨텍스트가 세션 기록에 하나의 문서 만 포함 된 브라우징 컨텍스트 인 경우 스크립트로 닫을 수 있습니다.
이것은 하나의 작은 예외를 제외하고는 자바 스크립트가 동일한 자바 스크립트에 의해 열리지 않은 창을 닫을 수 없어야 함을 의미 합니다.
Chrome에서는 사용자 스크립트에는 적용되지 않는 예외를 허용하지만 Firefox는 그렇지 않습니다. Firefox 구현 플랫 아웃 상태 :
이 메소드는 스크립트를 사용하여 열린 창에 대해서만 호출 할 수 있습니다 window.open
.
window.close
Greasemonkey / Tampermonkey / userscript에서 사용하려고하면 다음 과 같은 결과가 나타납니다.
Firefox : 오류 메시지 " Scripts may not close windows that were not opened by script.
"
Chrome : 자동으로 실패합니다.
장기적인 해결책 :
이를 처리하는 가장 좋은 방법 은 Chrome 확장 프로그램 및 / 또는 Firefox 애드온을 대신 만드는 것입니다. 현재 창을 안정적으로 닫을 수 있습니다.
그러나 window.close
Greasemonkey / Tampermonkey 스크립트의 경우 보안 위험 이 훨씬 적기 때문에; Greasemonkey와 Tampermonkey는 API에서이 기능을 합리적으로 제공 할 수 있습니다 (확장 기능을 패키지화합니다).
기능 요청을 고려하십시오.
해키 해결 방법 :
Chrome 은 현재 "자체 리디렉션"공격에 취약했습니다. 따라서 다음과 같은 코드는 일반적으로 작동했습니다.
open(location, '_self').close();
이것은 버그가 많은 행동, IMO이며, 현재 (대략 2015 년 4 월 기준) 대부분 차단되었습니다. 탭이 새로 열리고 검색 기록에 페이지가없는 경우 에만 삽입 된 코드 에서 작동 합니다. 따라서 매우 작은 환경에서만 유용합니다.
그러나 Chrome (v43 및 v44)과 Tampermonkey (v3.11 이상)에서는 변형이 계속 작동합니다 . 명백 @grant
하고 평범한 것을 사용하십시오 window.close()
. EG :
// ==UserScript==
// @name window.close demo
// @include http://YOUR_SERVER.COM/YOUR_PATH/*
// @grant GM_addStyle
// ==/UserScript==
setTimeout (window.close, 5000);
업데이트를위한 zanetu 에게 감사합니다 . 탭이 하나만 열려 있으면 작동하지 않습니다. 추가 탭만 닫습니다.
Firefox 는 이러한 악용으로부터 안전합니다. 따라서 유일한 자바 스크립트 방법은 한 번에 하나의 브라우저로 보안 설정을 손상시키는 것입니다.
당신은 열 수 about:config
와 설정
allow_scripts_to_close_windows
에 true
.
스크립트가 개인적인 용도라면 계속 진행하십시오. 다른 사람에게 해당 설정을 사용하도록 요청하면 편견을 가지고 거절하는 것이 현명하고 정당합니다.
현재 Chrome에 동등한 설정이 없습니다.
window.close()
크롬에서 나를 위해 일합니다.