>웹 프론트엔드 >JS 튜토리얼 >`window.close()` 및 `self.close()`가 Chrome Windows를 닫지 못하는 이유는 무엇입니까?

`window.close()` 및 `self.close()`가 Chrome Windows를 닫지 못하는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-18 03:43:10963검색

Why Do `window.close()` and `self.close()` Fail to Close Chrome Windows?

Window.close 및 Self.close가 Chrome을 닫지 못함 Windows: 종합 분석

window.close() 또는 self.close 호출 () JavaScript 코드 내에서 Chrome의 창을 닫지 못할 수 있습니다. 이러한 불일치는 스크립트가 생성되지 않은 한 스크립트가 창을 닫는 것을 Chrome에서 금지한다는 일반적인 오해에서 비롯됩니다. 이는 거짓이지만 이러한 메서드는 여전히 예상대로 작동하지 못할 수 있습니다. 이 기사에서는 근본적인 이유를 자세히 살펴보고 잠재적인 해결책을 모색합니다.

보안 제한

최신 브라우저는 악성 스크립트가 무차별적으로 창을 닫는 것을 방지하기 위해 보안 조치를 구현했습니다. window.close() 사양에 따라 JavaScript는 일반적으로 동일한 스크립트로 생성되지 않은 창을 닫는 것이 허용되지 않습니다. 이러한 제한은 보안 악용 및 사용자 불편을 억제하는 것을 목표로 합니다.

Firefox 구현

Firefox는 이러한 보안 지침을 엄격히 준수하며 스크립트가 열지 않은 창을 닫는 것을 명시적으로 금지합니다. 스크립트. Greasemonkey/Tampermonkey 스크립트가 Firefox에서 window.close()를 사용하려고 하면 "스크립트가 스크립트로 열지 않은 창을 닫을 수 없습니다."라는 오류 메시지가 표시됩니다.

Chrome 구현

반면에 Chrome에서는 스크립트가 생성되지 않은 창을 닫을 수 있습니다. 그러나 이 예외는 Greasemonkey 또는 Tampermonkey와 같은 사용자 스크립트 컨텍스트로 확장되지 않습니다. 이러한 컨텍스트에서 window.close()를 사용하려고 하면 자동으로 실패하게 됩니다.

해결 방법

Chrome 확장 프로그램 및 Firefox 추가 기능은 신뢰할 수 있는 닫기 솔루션을 제공합니다. Windows에는 사용자를 위한 해킹된 해결 방법이 있습니다. scripts:

Chrome:

  • 자체 리디렉션 악용: 이 악용은 일반적으로 더 이상 효과적이지 않습니다. 그러나 검색 기록 없이 새로 열린 탭에 삽입된 코드로 계속 작동할 수 있습니다.
  • @grant Window.Close 메서드: Tampermonkey 스크립트에서 @grant 지시어를 사용하면 다음이 가능합니다. window.close() 기능을 활성화합니다. 그러나 이는 추가 탭에만 작동하며 마지막 남은 탭에는 작동하지 않습니다.

Firefox:

  • 보안 설정 비활성화: about:config 설정allow_scripts_to_close_windows를 true로 변경합니다. 이는 보안 문제로 인해 권장되지 않습니다.

장기적 솔루션

가장 안정적인 접근 방식은 전용 Chrome 확장 프로그램 또는 Firefox 추가 기능을 만드는 것입니다. window.close()를 효과적으로 호출할 수 있습니다. 또는 사용자 스크립트 개발자가 내장된 창 닫기 기능에 대해 Greasemonkey 또는 Tampermonkey에 기능 요청을 제출하는 것을 고려할 수 있습니다.

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.