Как я могу закрыть окно браузера, не получая приглашение «Хотите закрыть это окно»?

Как закрыть окно браузера, не получая приглашение Вы хотите закрыть это окно?

Подсказка появляется, когда я использую функцию window.close();.


person Derek    schedule 11.09.2008    source источник
comment
проще всего: window.open('','_self').close()   -  person markasoftware    schedule 23.11.2013
comment
В Firefox все это может быть спорным, если пользователь отключит закрытие окна. kb.mozillazine.org/   -  person Engineer2021    schedule 17.07.2014
comment
Если вы сами не являетесь владельцем окна, вы не должны этого делать.   -  person Robert Harvey    schedule 21.07.2014
comment
Больше невозможно. stackoverflow.com/a/19768082/391101   -  person harvest316    schedule 12.07.2017


Ответы (17)


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

Это работает для меня.

person Arabam    schedule 28.04.2010
comment
Работает для IE11, Safary 5.1.7, но не работает в FF и Chrome. - person nikolai.serdiuk; 23.10.2014
comment
Работает в Firefox 38.0.5 и Chrome 43 - person justanotherprogrammer; 27.06.2015
comment
что, если окно открывается с помощью showModalDialog? Не работает на IE10 - person bjan; 09.03.2016
comment
Не уверен, что это работает во всех браузерах, но работает в IE11!!! Для какого браузера мы должны создать в настоящее время. Спасибо за этот ответ, вы избавили меня от многих проблем. - person KidBilly; 19.01.2017
comment
Отлично работает в IE 11, Chrome 76.0.3809, Firefox 69.0. - person Rahul Mahadik; 20.09.2019

Скриптам не разрешено закрывать окно, открытое пользователем. Это считается угрозой безопасности. Хотя этого нет ни в одном стандарте, все поставщики браузеров следуют ему (Mozilla docs). Если это происходит в некоторых браузерах, это ошибка безопасности, которая (в идеале) исправляется очень быстро.

Ни один из хаков в ответах на этот вопрос больше не работает, и если кто-то придумает еще один грязный хак, в конце концов он тоже перестанет работать.

Я предлагаю вам не тратить энергию на борьбу с этим и использовать метод, который браузер так любезно предлагает вам спросить пользователя, прежде чем вы, казалось бы, сломаете его страницу.

person rvighne    schedule 20.07.2014
comment
Или еще проще: вообще не закрывайте окно. Если вы закончили, отправьте пользователя обратно на вашу домашнюю страницу или в какое-либо другое централизованное место. - person ; 21.07.2014
comment
@duskwuff, мы проводим автоматические тесты для этих браузеров. Их нужно закрыть. - person ouflak; 01.12.2017
comment
@oflak Наверняка в вашей среде тестирования есть способ манипулировать окнами. - person ; 01.12.2017
comment
@duskwuff Как насчет сторонних библиотек, которые оставляют окна без дела? Вы, конечно, не можете предложить, чтобы я просто оставил этот беспорядок для пользователя или перенаправил его на (дублированный) вид домашней страницы. - person Abandoned Cart; 28.11.2018
comment
@AbandonedCart Если библиотека открыла окно сама (т. е. окно не было открыто пользователем), она должна иметь возможность закрыть это окно самостоятельно. Если этого не произойдет, рассмотрите возможность использования другой библиотеки, я думаю? - person ; 28.11.2018
comment
@duskwuff А если это официальная версия или единственная существующая? - person Abandoned Cart; 28.11.2018
comment
Не могли бы вы также объяснить в своем ответе в качестве сноски, почему это угроза безопасности. - person T.Todua; 28.01.2019
comment
Если это не IE11, они не собираются обновлять его снова - я добавляю свои обезьяньи хаки - skurt skurt - person Coty Embry; 01.10.2020

Мой друг... есть способ, но слово "хак" не подходит для его описания. Вы должны в основном использовать ошибку в IE 6 и 7.

Работает каждый раз!

Вместо вызова window.close() перенаправьте на другую страницу.

Начальная страница:

alert("No whammies!");
window.open("closer.htm", '_self');

Редирект на другую страницу. Это обманывает IE, позволяя вам закрыть браузер на этой странице.

Заключительная страница:

<script type="text/javascript">
    window.close();
</script>

Круто да?!

person Nick    schedule 11.09.2009
comment
Я знаю, что прошло уже 2 года. Но это потрясающе. Работает в IE 8 и Firefox 15. - person Susie; 08.09.2012
comment
Похоже, Microsoft исправила эту ошибку в IE10. Кто-нибудь знает, как мы можем добиться этого в IE10? - person Abhi Rampal; 24.06.2013
comment
И self.close(), и window.close() не работают для IE на моей стороне. Тем не менее, Chrome, FF и Safari в порядке. - person NoName; 18.09.2015

Вот функция Javascript, которую я использую для закрытия браузера без подсказки или предупреждения, ее также можно вызвать из Flash. Он должен быть в html файле.

    function closeWindows() {
         var browserName = navigator.appName;
         var browserVer = parseInt(navigator.appVersion);
         //alert(browserName + " : "+browserVer);

         //document.getElementById("flashContent").innerHTML = "<br>&nbsp;<font face='Arial' color='blue' size='2'><b> You have been logged out of the Game. Please Close Your Browser Window.</b></font>";

         if(browserName == "Microsoft Internet Explorer"){
             var ie7 = (document.all && !window.opera && window.XMLHttpRequest) ? true : false;  
             if (ie7)
             {  
               //This method is required to close a window without any prompt for IE7 & greater versions.
               window.open('','_parent','');
               window.close();
             }
            else
             {
               //This method is required to close a window without any prompt for IE6
               this.focus();
               self.opener = this;
               self.close();
             }
        }else{  
            //For NON-IE Browsers except Firefox which doesnt support Auto Close
            try{
                this.focus();
                self.opener = this;
                self.close();
            }
            catch(e){

            }

            try{
                window.open('','_self','');
                window.close();
            }
            catch(e){

            }
        }
    }
person Kuldip D Gandhi    schedule 07.05.2013
comment
В IE 10.0.9200 открытие окна с помощью showModalDialog. closeWindows открывается новое окно (та же страница), в то время как предыдущее все еще открыто. - person bjan; 09.03.2016
comment
Не работало в Firefox, IE/Edge отображало запрос на подтверждение, но работало в Chrome. - person Dymas; 03.05.2019

Это работает в Chrome 26, Internet Explorer 9 и Safari 5.1.7 (без использования вспомогательной страницы, как ответ Ника):

<script type="text/javascript">
    window.open('javascript:window.open("", "_self", "");window.close();', '_self');
</script>

Вложенный window.open предназначен для того, чтобы IE не отображал подсказку Вы хотите закрыть это окно.

К сожалению, невозможно заставить Firefox закрыть окно.

person Danny Beckett    schedule 10.04.2013
comment
Работал и для IE 10. - person Mukus; 14.02.2018

В теге body:

<body onload="window.open('', '_self', '');">

Чтобы закрыть окно:

<a href="javascript:window.close();">

Протестировано в Safari 4.0.5, FF для Mac 3.6, IE 8.0 и FF для Windows 3.5.

person JimB    schedule 13.12.2010
comment
Функционально это то же самое, что сделал Ник. - person naugtur; 13.12.2010
comment
да. Если я правильно читаю сообщение Ника, он предлагает перенаправление перед вызовом window.close. Я написал, если вы не хотите использовать перенаправление. Если я неправильно понял сообщение Ника, извините. - person JimB; 16.12.2010

По соображениям безопасности окно может быть закрыто в JavaScript только в том случае, если оно было открыто с помощью JavaScript. Чтобы закрыть окно, вы должны открыть новое окно с _self в качестве цели, которая перезапишет ваше текущее окно, а затем закрыть это окно (что вы можете сделать, поскольку оно было открыто через JavaScript).

window.open('', '_self', '');
window.close();
person jbabey    schedule 31.08.2011
comment
это сработало для меня с Silverlight: HtmlPage.Window.Eval(window.open('', '_self', ''); window.close();); - person Mike Fuchs; 10.10.2011

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

Извините, что немного опоздал, но я нашел решение, по крайней мере, для моего случая. Протестировано в Safari 11.0.3 и Google Chrome 64.0.3282.167.

person Mada Aryakusumah    schedule 18.02.2018
comment
Работает и в Firefox версии 88, если для параметра конфигурации dom:allow_scripts_to_close_windows установлено значение true (по умолчанию — false). - person Suncat2000; 29.03.2021

Из здесь:

<a href="javascript:window.opener='x';window.close();">Close</a>

Вам нужно установить window.opener на что-то, иначе он жалуется.

person Harley Holcombe    schedule 11.09.2008
comment
У меня работает почти 7 лет спустя в Chrome, FF и IE 10. - person Mike Devenney; 04.02.2016

Из-за улучшений безопасности в IE вы не можете закрыть окно, если оно не открыто сценарием. Таким образом, способ обойти это будет заключаться в том, чтобы позволить браузеру думать, что эта страница открыта с помощью сценария, а затем закрыть окно. Ниже приведена реализация.

Попробуйте, это прекрасно работает!
javascript закрыть текущее окно без запроса IE

<script type="text/javascript">
function closeWP() {
 var Browser = navigator.appName;
 var indexB = Browser.indexOf('Explorer');

 if (indexB > 0) {
    var indexV = navigator.userAgent.indexOf('MSIE') + 5;
    var Version = navigator.userAgent.substring(indexV, indexV + 1);

    if (Version >= 7) {
        window.open('', '_self', '');
        window.close();
    }
    else if (Version == 6) {
        window.opener = null;
        window.close();
    }
    else {
        window.opener = '';
        window.close();
    }

 }
else {
    window.close();
 }
}
</script>

javascript закрыть текущее окно без запроса IE

person Vivek    schedule 18.09.2013

Создайте функцию JavaScript

<script type="text/javascript">
    function closeme() {
        window.open('', '_self', '');
        window.close();
    }
</script>

Теперь напишите этот код и вызовите указанную выше функцию JavaScript.

<a href="Help.aspx" target="_blank" onclick="closeme();">Help</a>

Или просто:

<a href="" onclick="closeme();">close</a>
person Niloofar    schedule 17.12.2012

Это будет работать:

<script type="text/javascript">
function closeWindowNoPrompt()
{
window.open('', '_parent', '');
window.close();
}
</script>
person Community    schedule 11.02.2016
comment
Работал с реализацией Python Eel Chrome. - person revliscano; 08.12.2019

В моей ситуации следующий код был встроен в файл php.

var PreventExitPop = true;
function ExitPop() {
  if (PreventExitPop != false) {
    return "Hold your horses! \n\nTake the time to reserve your place.Registrations might become paid or closed completely to newcomers!"
  }
}
window.onbeforeunload = ExitPop;

Итак, я открыл консоль и пишу следующее

PreventExitPop = false

Это решило проблему. Итак, узнайте код JavaScript, найдите переменную (переменные) и назначьте им соответствующее «значение», которое в моем случае было «ложным».

person nurmurat    schedule 17.04.2017

Браузер жалуется, потому что вы используете JavaScript для закрытия окна, которое не было открыто с помощью JavaScript, то есть window.open('foo.html');.

person Billy Jo    schedule 11.09.2008

Поместите следующий код в файл ASPX.

<script language=javascript>
function CloseWindow() 
{
    window.open('', '_self', '');
    window.close();
}
</script>

Поместите следующий код в код события нажатия кнопки.

string myclosescript = "<script language='javascript' type='text/javascript'>CloseWindow();</script>";

Page.ClientScript.RegisterStartupScript(GetType(), "myclosescript", myclosescript);

Если у вас нет какой-либо обработки перед закрытием, вы можете напрямую поместить следующий код в сам ASPX в теге нажатия кнопки.

OnClientClick="CloseWindow();"

Надеюсь это поможет.

person Kamleshkumar Gujarathi    schedule 11.11.2014
comment
Вопросы требуют простого решения javascript, избегайте ASPX. - person Zeeshan; 05.12.2015
comment
@Zeeshan: Любой достойный разработчик может видеть, что JavaScript в верхней части сообщения Камлешкумара Гуджарати может быть применен к их собственным требованиям. Прикосновение резкое, если вы проголосовали за его ответ. - person Paul; 30.12.2015

Лучшее решение, которое я нашел, это:

this.focus();
self.opener=this;
self.close();
person Derek    schedule 11.09.2008

Я собираюсь опубликовать это, потому что это то, что я сейчас использую для своего сайта, и оно работает как в Google Chrome, так и в IE 10 без каких-либо всплывающих сообщений:

<html>
    <head>
    </head>
    <body onload="window.close();">
    </body>
</html>

У меня есть функция на моем сайте, которую я хочу запустить, чтобы сохранить переменную включения/выключения в сеансе, не переходя напрямую на новую страницу, поэтому я просто открываю крошечную всплывающую веб-страницу. Затем эта веб-страница немедленно закрывается с помощью функции onload="window.close();".

person Logan Hasbrouck    schedule 08.10.2015
comment
Да: но, как и информация stackoverflow.com/a/24854246/2239406: вы открываете окно в javascript, затем можете закрыть с помощью JavaScript. - person Denis Chenu; 23.10.2015
comment
ну, если он не должен работать, и если это было «пропатчено», он по-прежнему работает во всех браузерах на моем компьютере в обязательном порядке. Я просто предлагал решение, которое в настоящее время работает для меня. - person Logan Hasbrouck; 24.10.2015
comment
Разница в том, что вы открываете окно в JS. Если окно не открывается в JS: не работает. - person Denis Chenu; 27.10.2015
comment
Нет, я не использую JS для открытия окна; скорее я использую a с target=_blank, чтобы открыть крошечное всплывающее окно по определенному URL-адресу, затем, наконец, я использую JS, чтобы закрыть окно. Цель состоит в том, чтобы конкретный URL-адрес сохранял значение сеанса для отключения фоновых изображений, хотя здесь вскоре я удалю его в пользу ajax, как только выясню, как это сделать. (все еще изучаю веревки) - person Logan Hasbrouck; 27.10.2015