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

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 ). Если это происходит в некоторых браузерах, это ошибка безопасности, которая (в идеале) исправляется очень быстро.

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

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

Rvighne
источник
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

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

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

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

От сюда :

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

Надо что-то настраивать window.opener, а то жалуется.

Харли Холкомб
источник
У меня работает почти 7 лет спустя в Chrome, FF и IE 10.
Майк Девенни
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
1
window.opener=window;
window.close();
Дэнни Беккет
источник
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. (все еще изучаю верёвки)
Логан Хасбрук