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


86

Как я могу закрыть окно браузера, не получив запроса « Вы хотите закрыть это окно

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


22
window.open('','_self').close()
Самый

В Firefox все это может быть спорным, если пользователь отключает закрытие окна. kb.mozillazine.org/…
Брайан

3
Если вы сами не являетесь владельцем окна, вы не должны.
Роберт Харви

Больше невозможно. stackoverflow.com/a/19768082/391101
gather316

Ответы:


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

У меня это работает.


Работает в IE11, Safary 5.1.7, но не работает в FF и Chrome.
nikolai.serdiuk

Работает в Firefox 38.0.5 и Chrome 43
другой программист

что если окно открывается с помощью showModalDialog? Он не работает в
IE10

Не уверен, что это работает во всех браузерах, но это работает в IE11 !!! Для какого браузера мы сейчас создаем. Спасибо за этот ответ, вы избавили меня от многих проблем.
CrazyPaste

Прекрасно работает в IE 11, Chrome 76.0.3809, Firefox
69.0

57

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

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

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

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

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

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

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

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

Потрясающе да ?!


1
Я знаю, что прошло уже 2 года. Но это потрясающе .. Работает на IE 8 и firefox 15
Susie

9
Похоже, Microsoft исправила эту ошибку в IE10. Кто-нибудь знает, как мы можем достичь этого в IE10?
Abhi Rampal

И self.close (), и window.close () не работают с IE на моей стороне. Однако Chrome, FF и Safari в порядке
NoName

57

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

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

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


5
Или, что еще проще: вообще не закрывать окно. Если вы закончили, отправьте пользователя обратно на свою домашнюю страницу или в какое-то другое центральное место.
duskwuff -inactive-

2
@duskwuff, Мы проводим автоматические тесты против этих браузеров. Их нужно закрыть .
ouflak 01

2
@ouflak Наверняка в вашей среде тестирования есть способ манипулировать окнами.
duskwuff -inactive- 01

1
@duskwuff Как насчет сторонних библиотек, которые оставляют окна без дела? Вы, конечно, не можете предложить, чтобы я просто оставил этот беспорядок для пользователя или перенаправил его на (дублированный) просмотр домашней страницы.
Брошенная тележка

1
Не могли бы вы также объяснить в своем ответе в виде сноски, почему это угроза безопасности.
T.Todua

31

Вот функция 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){

            }
        }
    }

В IE 10.0.9200 открытие окна с помощью showModalDialog. Вкл. closeWindows, Открывается новое окно (та же страница), в то время как предыдущее все еще открыто.
bjan 09

Не работал в Firefox, IE / Edge отображал запрос на подтверждение, но работал в Chrome.
Димас

12

Это работает в 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 закрыть окно.


Работал и с IE 10.
Mukus

11

В теге 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


Функционально это то же самое, что сделал Ник.
naugtur

Да. Если я правильно читаю сообщение Ника, он предлагает перенаправление перед вызовом window.close. Я написал, что вы не хотите использовать перенаправление. Если я неправильно читаю пост Ника, извиняюсь.
JimB

7

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

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

у меня это сработало с Silverlight: HtmlPage.Window.Eval ("window.open ('', '_self', ''); window.close ();");
Майк Фукс


6

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

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


5

Из-за улучшений безопасности в 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


2

Создать функцию 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>

2

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

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

Работал с использованием реализации Python Eel для Chrome.
revliscano


0

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


0

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

this.focus();
self.opener=this;
self.close();

0

Поместите следующий код в файл 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();"

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


Вопросы требуют простого решения javascript, избегайте ASPX.
Zeeshan 05

@Zeeshan: Любой достойный разработчик может увидеть, что JavaScript в верхней части сообщения Камлешкумара Гуджаратхи может быть применен к его собственным требованиям. Прикосновение резкое, если вы проголосовали против его ответа.
Пол

0

В моей ситуации следующий код был встроен в файл 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, найдите переменную (ы) и присвойте им соответствующее «значение», которое в моем случае было «ложным».


-3

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

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

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


Да, но, как и информация на stackoverflow.com/a/24854246/2239406 : вы открываете windo в javascript, а затем можете закрыть с помощью javascript.
Денис Чену

ну, если он не должен работать, и если он был «исправлен», он по-прежнему будет работать во всех браузерах на моем компьютере без сбоев. Я просто предлагал решение, которое в настоящее время работало для меня.
Логан Хасбрук,

Разница в том, что вы открываете окно в JS. Если окно не открывается в JS: не работайте.
Денис Чену

Нет, я не использую JS для открытия окна; скорее я использую aс, target=_blankчтобы открыть крошечное всплывающее окно по определенному URL-адресу, а затем, наконец, я использую JS, чтобы закрыть окно. Его цель заключается в том, что конкретный URL-адрес сохраняет значение сеанса для отключения фоновых изображений, хотя здесь скоро я удалю его в пользу ajax, как только выясню, как использовать ajax. (все еще изучаю верёвки)
Логан Хасбрук
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.