source

window.close 및 self.close는 Chrome에서 창을 닫지 않습니다.

factcode 2022. 9. 18. 09:54
반응형

window.close 및 self.close는 Chrome에서 창을 닫지 않습니다.

가 '아예'를 했을 때window.close() ★★★★★★★★★★★★★★★★★」self.close()창문을 닫지 않아요.현재 Chrome에서는 스크립트가 생성되지 않은 창을 스크립트로 닫을 수 없다는 믿음이 있는 것 같습니다.이는 명백한 거짓이지만 확인을 위해 알림을 팝업해야 하는 경우에도 여전히 그렇게 하도록 되어 있습니다.이런 일은 일어나지 않아요.

실제로 수 방법을 이 있을까요?javascript:window.close() ★★★★★★★★★★★★★★★★★」javascript:self.close()Chrome 기반의 브라우저가 아닌 모든 브라우저에서 실제로 예상된 것과 잘 되는 것을 실제로 실행할 수 있습니까?어떤 제안이라도 주시면 감사하겠습니다.JQuery는 Javascript를 사용합니다.

업데이트: 제안된 내용의 대부분은 심각한 제한과 사용상의 문제를 안고 있지만 스크립트 헤더에서 사용하는 최신 제안(TamperMonkey 고유)은 보통 닫기 메서드를 처리할 수 없는 탭에서도 문제가 발생합니다.완전히 이상적인 것은 아니지만, 모든 경우에 대해 일반화된 것은 아니지만, 제 경우에는 좋은 해결책입니다.

일반 Javascript는 창을 닫을 수 없습니다.이는 최근 도입된 보안 기능으로 다양한 악의적인 악용 및 문제를 방지합니다.

의 최신 작업 사양:

close()다음 조건이 모두 충족되면 탐색 컨텍스트 A를 닫아야 합니다.

  • 대응하는 브라우징 컨텍스트A스크립트 클로징이 가능합니다.
  • 현재 스크립트의 탐색 컨텍스트는 탐색 컨텍스트 A에 익숙합니다.
  • 현재 스크립트의 탐색 컨텍스트는 탐색 컨텍스트 A를 탐색할 수 있습니다.

브라우징 컨텍스트는 스크립트에 의해 작성된 보조 브라우징 컨텍스트(사용자의 작업이 아닌) 또는 세션 기록이 하나의 문서만 포함하는 브라우징 컨텍스트인 경우 스크립트로 클로징할 수 있습니다.

즉, 한 가지 작은 예외를 제외하고 javascript는 동일한 javascript에 의해 열리지 않은 창을 닫을없습니다.

크롬은 사용자 스크립트에 적용되지 않는 예외를 허용하지만 Firefox는 그렇지 않습니다.Firefox 실장은 다음과 같습니다.

할 수 .window.open★★★★★★ 。


「 」를 ,window.closeGreasemonkey / Tampermonkey / userscript 。
파이어폭스:에러 메시지 「」Scripts may not close windows that were not opened by script.
Chrome: 자동으로 실패합니다.



장기적인 해결책:

이 문제를 해결하는 가장 좋은 방법은 Chrome 확장/또는 Firefox 애드온을 만드는 것입니다.그러면 현재 창을 확실하게 닫을 수 있습니다.

보안 ,에 의해 하므로 안음음음음음음 however however however however however however however however however however however however however however however however however however however however however however however however 。window.closeGreasemonkey / Tampermonkey 。Greasemonkey 및 Tampermonkey는 API에서 이 기능을 합리적으로 제공할 수 있습니다(기본적으로 확장 기능을 패키징합니다).
기능 요구를 하는 것을 검토해 주세요.



해결 방법은 다음과 같습니다.

Chrome은 현재 "셀프 리다이렉션" 부정 이용에 취약합니다.일반적으로 다음과 같은 코드가 사용되었습니다.

open(location, '_self').close();

이는 버그 동작인 IMO이며 현재(2015년 4월 현재) 대부분 차단되어 있습니다.탭이 새로 열려 있고 검색 기록에 페이지가 없는 경우에만 삽입된 코드에서 계속 작동합니다.따라서 매우 작은 환경에서만 유용합니다.

다만, Chrome(v43 & v44)와 Tampermonkey(v3.11 이후)에서는, 아직 버라이어티가 기능합니다.명시적 사용@grantwindow.close() : . EG :

// ==UserScript==
// @name        window.close demo
// @include     http://YOUR_SERVER.COM/YOUR_PATH/*
// @grant       GM_addStyle
// ==/UserScript==

setTimeout (window.close, 5000);

업데이트 해주신 자네투님 감사합니다.탭이 1개만 열려 있으면 이 기능은 작동하지 않습니다.추가 탭만 닫힙니다.


Firefox는 이러한 부정 이용으로부터 안전합니다.따라서 Javascript의 유일한 방법은 한 번에 하나의 브라우저로 보안 설정을 무력화하는 것입니다.

열 수 있습니다.about:config set ★★★
allow_scripts_to_close_windows로로 합니다.true

스크립트를 개인적인 용도로 사용하는 경우 그렇게 하십시오.만약 당신이 다른 사람에게 그 설정을 켜라고 한다면, 그들은 편견을 가지고 거절하는 것이 현명하고 정당할 것이다.

현재 Chrome에 해당하는 설정은 없습니다.

Chrome 버전 36.0.1985.125의 보안 문제 수정

Chrome 36.0.1985.125 2014년 7월 16일 수요일 릴리즈 노트

내가 관찰한 바로는, 이 업데이트로, 사용상의 문제가 해결되었습니다.window.close()팝업 창을 닫습니다.실패 시 콘솔에 "스크립트는 열린 창만 닫을 수 있습니다."라고 표시됩니다.이는 최신 릴리즈에서는 진부한 회피책(브록 애덤스의 답변)이 작동하지 않을 수 있다는 을 의미한다.

따라서 이전 Chrome에서 출시된 빌드에서는 아래 코드 블록은 작동하지만 이 업데이트에서는 작동하지 않을 수 있습니다.

window.open('', '_self', '');
window.close();

이 업데이트의 경우 팝업 창을 닫으려면 코드를 업데이트해야 합니다.해결책 중 하나는 팝업창 ID를 가져와

chrome.windows.remove(integer windowId, function callback)

제거 방법.Chrome 확장 윈도우 API는 chrome에서 찾을 수 있습니다.창문이 열려 있습니다.

사실 제 Chrome Extension MarkView가 이 문제에 직면해 있어서 이 Chrome Update에서 작동하기 위해 코드를 업데이트해야 했습니다.덧붙여서 MarkView는 훌륭한 마크다운 파일을 읽고 쓰는 도구이며, 컨텐츠 아웃라인, 정렬 가능한 표, 코드 블록 구문 하이라이트 등의 기능을 줄 번호와 함께 제공합니다.

저도 이 글을 만들었습니다.어떤 코멘트라도 환영합니다.

이제 tampermonkey를 사용할 수 있습니다.

// @grant        window.close

그리고 그냥 전화만 하면 돼

window.close();

이 기능을 수행하기 위한 요건:

윈도우 런처 스크립트를 통해 열리지 않은 탭에서는 동작하지 않기 때문에 자바스크립트 핸들을 사용하기 위해서는 윈도우 런처로부터 윈도우/탭을 열어야 합니다.이 테스트 페이지에는 다음 방법이 나와 있습니다.

http://browserstrangeness.bitbucket.io/window_close_tester.htm

내 런처에서도 작동하지 않는 경우 브라우저, 장치 및 버전이 필요합니다.버전이 다른 브라우저는 디바이스에 따라 다르게 동작합니다.(예를 들어 Firefox나 iPad의 Chrome은 그들이 말하는 것과 다르다.스킨이 다른 사파리입니다!)

예를 들어, 'I using iPad에서 Safari 10.14를 사용하고 있습니다.'라고 말하는 것이 중요합니다.그러면 저(또는 stackoverflow에서 도움이 되는 다른 사람)가 이 정보를 알아보고 다른 사용자를 돕기 위해 결과를 게시할 수 있습니다.잘 부탁드립니다.런처를 사용하여 내 예시로 작동하면 작동됩니다.

저는 Brock Adams가 게시한 방법을 사용하고 있으며, 다른 창에서 버튼이나 링크로 사용자가 시작한다면 Firefox에서도 작동합니다.

open(location, '_self').close();

버튼 누름으로 호출하여 사용자가 시작하였으며, Chrome 90, Internet Explorer 11, Edge, Safari 7-10 및 Firefox 35 및 88을 사용하여 정상적으로 작동합니다.Windows 및 Mac OS X 10.6, 10.9, 10.10 및 10.14 버전 8.1 및 10을 사용하여 테스트했습니다.


자동 닫기 창 코드(자체 닫기 페이지)

사용자가 직접 닫을 수 있는 창에서 사용하는 전체 코드:

창을 닫습니다.htm

JavaScript:

function quitBox(cmd)
{   
    if (cmd=='quit')
    {
        open(location, '_self').close();
    }   
    return false;   
}

HTML:

<input type="button" name="Quit" id="Quit" value="Quit" onclick="return quitBox('quit');" />

다음은 테스트 페이지와 함께 작업 예를 보여 줍니다. (이제 Chrome 90.0 및 Firefox 88.0에서 테스트되었습니다. Windows 10 및 Mac 10.14 Mojave에서 모두 테스트되었습니다.)

http://browserstrangeness.bitbucket.io/window_close_tester.htm


창 열기 코드(위 페이지를 여는 페이지)

이 기능을 사용하려면 보안에 의해 강제된 크로스 브라우저 호환성을 위해 닫히는 창이 사용자가 동일한 사이트 도메인 내에서 버튼을 클릭함으로써 이미 열려 있어야 합니다.

예를 들어, 위의 방법을 사용하여 스스로 닫는 창은 이 코드를 사용하여 페이지에서 열 수 있습니다(위 링크된 예제 페이지에서 제공된 코드).

window_close_close.htm

JavaScript:

function open_a_window() 
{
    window.open("window_to_close.htm"); 

    return false;
}

HTML:

<input type="button" onclick="return open_a_window();" value="Open New Window/Tab" />

아직도 많은 사람들이 자바스크립트를 사용하여 크롬 브라우저를 닫는 방법을 찾고 있습니다.다음 방법은 Chrome을 APP 런처로서 사용하는 경우에만 유효합니다.예를 들어 kiosk!

다음을 테스트했습니다.

다음 내선번호를 사용하고 있습니다.키오스크 닫기

사용설명서에 따라 정상적으로 동작하고 있습니다(테스트 중에는 반드시 캐시를 클리어해 주세요).사용하는 javascript는 (클릭 이벤트에 첨부) 입니다.

window.location.href = '/closekiosk';

그것이 제가 찾은 유일한 해결책이기 때문에 누군가 도움이 되었으면 합니다.

참고: 확장이 백그라운드에서 실행되고 Chrome 트레이 아이콘이 추가됩니다."크롬을 백그라운드에서 실행"(또는 유사한 텍스트) 옵션이 선택되어 있습니다.잘 될 때까지 가지고 놀아야 할 수도 있어요.선택을 취소했더니 이제 제대로 작동합니다!

"확실히 거짓"이라고 생각하지만, "신앙인 것 같다"는 당신의 말은 사실 옳습니다.window.close의 Mozilla 문서에는 다음과 같이 기술되어 있습니다.

이 메서드는 window.open 메서드를 사용하여 스크립트에 의해 열린 윈도우에 대해서만 호출할 수 있습니다.스크립트에 의해 창이 열리지 않은 경우 JavaScript Console에 다음 오류가 나타납니다.스크립트에서 열지 않은 창을 닫을 수 없음

'아직도 할 수 있다'고 하셨는데, 그것을 뒷받침할 만한 참고 자료를 찾지 못하셨을 것 같은데, 혹시 뭔가 잘못 기억하신 건 아닐까요?

나는 나에게 맞는 새로운 방법을 찾았다.

var win = window.open("about:blank", "_self");
win.close();

아래 코드가 효과가 있었습니다.

window.open('location', '_self', '');
window.close();

Chrome 43.0.2357.81로 테스트 완료

오래된 것일 수도 있지만, 대답하자.

top.close()사용하여 탭을 닫습니다. window.close() 또는 기타 open...close는 작동하지 않았습니다.

제 경우, 페이지를 닫아야 하는데 링크에 의해 열렸을 수 있습니다.window.close실패할 거야

제가 선택한 솔루션은window.close, 그 뒤에 a가 이어집니다.window.setTimeout하다

하면, 「 」의 경우.window.close성공하면 해당 페이지의 실행이 중지되지만 실패하면 1초 후에 다른 페이지로 리다이렉트됩니다.

window.close();
window.setTimeout(function(){location.href = '/some-page.php';},1000);

저는 이 문제에 대한 저의 "해결책"을 공유하고 싶었습니다.우리들 대부분은 사용자가 다른 웹 사이트를 방문한 후, 그리고 다른 웹 사이트를 방문하기 전에 표준 브라우저 세션에서 브라우저 창을 닫으려고 하는 것 같습니다.

다만, 그 디바이스의 Web 앱을 만들고 있는 것은, 기본적으로 그 디바이스의 유일한 작업입니다.부팅하면 Chrome이 실행되고 앱으로 이동합니다.인터넷에도 접속되어 있지 않고, 통신하는 서버도 로컬 도커 컨테이너에 있습니다.사용자가 단말기에 액세스하여 시스템 업데이트를 수행할 수 있도록 앱을 닫는 방법(Chrome을 닫는 방법)이 필요합니다.

기동해, Kiosk 모드로 Chrome 를 기동해, 이미 올바른 주소로 기동합니다.이 경우 사양의 두 번째 옵션을 쉽게 충족할 수 있습니다.

브라우징 컨텍스트는 스크립트에 의해 작성된 보조 브라우징 컨텍스트(사용자의 작업이 아닌) 또는 세션 기록이 하나의 문서만 포함하는 최상위 브라우징 컨텍스트인 경우 스크립트 클로징이 가능합니다.

그냥 '네'라고 부르면 돼.window.close()내 키오스크 앱은 작동한다!

스크립트에 의해 열리지 않은 창을 닫을 수 없는 경우 다음 코드를 사용하여 페이지를 파기할 수 있습니다.

 document.getElementsByTagName ('html') [0] .remove ();

앵커 태그를 사용하여 자창을 여는 사용자에 대해 이 문서에서는 이 문제의 회피책을 설명합니다.

의 Chrome에서는 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★rel는 Attribute로 됩니다.noopener로는 타겟을 _blank 로 해 주세요그래서 설정함으로써opener예전 행태를 되찾았군

는 탭 스냅 공격을 피하기 위해 도입된 것입니다.

window.open()을 사용하여 새 창을 열어야 위에서 설명한 대로 코드를 사용하여 새 창을 닫을 수 있습니다.이 방법은 나에게 딱 맞습니다.주의: href를 사용하여 새 탭에서 페이지를 열지 마십시오.Window.close()는 "href"와 함께 사용할 수 없습니다.대신 window.open()을 사용하십시오.

아래의 제 코드를 사용해 보세요.부모 창을 리다이렉트 할 때도 도움이 됩니다.

부모:

<script language="javascript">

function open_a_window() 
{
    var w = 200;
        var h = 200;
        var left = Number((screen.width/2)-(w/2));
        var tops = Number((screen.height/2)-(h/2));

        window.open("window_to_close.html", '', 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=no, width='+w+', height='+h+', top='+tops+', left='+left);

   return false;
}

// opener:
window.onmessage = function (e) {
  if (e.data === 'location') {
    window.location.replace('https://www.google.com');
  }
};

</script>

<input type="button" onclick="return open_a_window();" value="Open New Window/Tab" />

팝업:

<!DOCTYPE html>
<html>
<body onload="quitBox('quit');">

<h1>The window closer:</h1>

<input type="button" onclick="return quitBox('quit');" value="Close This Window/Tab" /> 


<script language="javascript">

function quitBox(cmd) 
{      
    if (cmd=='quit')    
    {   
       window.opener.postMessage('location', '*');
       window.open(location, '_self').close();    
    }     
    return false;   
}

</script>

</body>
</html>

Tamper Monkey의 경우:

@grant window.close 

참고 자료: https://www.tampermonkey.net/documentation.php#_grant

onclick="return self.close()"와 같은 기능을 사용해 보십시오.

언급URL : https://stackoverflow.com/questions/19761241/window-close-and-self-close-do-not-close-the-window-in-chrome

반응형