> 웹 프론트엔드 > JS 튜토리얼 > 왜 `window.close()` 및 `self.close()`가 내 Chrome 창을 닫지 않습니까?

왜 `window.close()` 및 `self.close()`가 내 Chrome 창을 닫지 않습니까?

Barbara Streisand
풀어 주다: 2024-12-14 19:01:14
원래의
156명이 탐색했습니다.

Why Won't `window.close()` and `self.close()` Close My Chrome Window?

"window.close 및 self.close Chrome에서 창을 닫지 마세요: 포괄적인 설명 및 솔루션"

일반적인 믿음과는 달리 JavaScript는 실제로 다음을 수행할 수 있습니다. Chrome에서도 스크립트로 생성된 창을 닫습니다. 악의적인 활동을 방지하기 위해 도입된 이 보안 조치는 JavaScript가 동일한 스크립트로 생성되지 않은 창을 닫는 것을 제한합니다.

문제의 근본

window.close() 사양에 따르면 브라우저는 다음 조건이 충족되면 창을 닫도록 선택할 수 있습니다.

  1. 브라우징 컨텍스트는 "스크립트 닫기 가능"이어야 합니다. 즉, 스크립트에 의해 생성되었음을 의미합니다. 또는 세션 기록에 문서가 하나만 있습니다.
  2. 현재 스크립트의 탐색 컨텍스트는 대상 탐색 컨텍스트에 익숙해야 합니다.
  3. 현재 스크립트의 탐색 컨텍스트는 탐색이 허용되어야 합니다. 대상 브라우징 컨텍스트.

Firefox 제한

Firefox는 다음 조건을 엄격하게 시행합니다. JavaScript는 동일한 스크립트로 열린 창만 닫을 수 있습니다. 이 기준을 충족하지 않는 창을 닫으려고 하면 "스크립트가 열지 않은 창은 스크립트가 닫지 못할 수 있습니다."라는 오류 메시지가 표시됩니다.

Chrome의 예외

Chrome에서는 다음을 허용합니다. 이 규칙은 예외로, 동일한 스크립트로 생성되지 않은 창이라도 JavaScript가 창을 닫을 수 있도록 허용합니다. 그러나 이 예외는 사용자 스크립트에는 적용되지 않습니다.

해결 방법

Chrome

  1. 자체 리디렉션 악용(사용되지 않음): 현재 페이지를 자체 페이지로 바꾼 다음 창을 닫습니다. open(location, '_self').close();. 이 익스플로잇은 현재 대부분 차단되었습니다.
  2. TamperMonkey 재정의(제한된 기능): 명시적인 // @grant 지시어를 사용하고 window.close()를 호출하면 Chrome 버전 43에서 추가 탭을 닫을 수 있으며

Firefox

  1. 보안 설정 조정(권장하지 않음):allow_scripts_to_close_windows를 true로 설정하여 보안 보호를 비활성화합니다. about:config에 있습니다. 이는 보안 위험을 초래합니다.

장기적 솔루션

안정적인 창 닫기를 위해서는 Chrome 확장 프로그램이나 Firefox 추가 기능 개발을 고려해 보세요. 이러한 확장 프로그램은 JavaScript의 제한 없이 현재 창을 닫을 수 있습니다.

위 내용은 왜 `window.close()` 및 `self.close()`가 내 Chrome 창을 닫지 않습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿