Як я можу закрити вікно веб-переглядача, не отримавши запит “Чи хочеш закрити це вікно”?


86

Як я можу закрити вікно браузера, не отримавши запит " Хочете закрити це вікно ?"

Підказка виникає, коли я використовую window.close();функцію.


22
найпростіший:window.open('','_self').close()
markasoftware

У Firefox це все може бути спорним, якщо користувач вимкне закриття вікна. kb.mozillazine.org/…
Брайан

3
Якщо ви не є власником вікна самостійно, не повинні.
Роберт Харві,

Більше неможливо. stackoverflow.com/a/19768082/391101
harvest316

Відповіді:


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

Це працює для мене.


Працює для IE11, Safary 5.1.7, але не працює в FF та Chrome.
nikolai.serdiuk

Працюємо у Firefox 38.0.5 та Chrome 43
justanotherprogrammer

а якщо вікно відкрито за допомогою 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
Сьюзі

9
Схоже, Microsoft виправила цю помилку в IE10. Хтось знає, як ми все ще можемо досягти цього в IE10?
Абхі Рампал

І self.close (), і window.close () не працюють для IE на моєму боці. Однак Chrome, FF та Safari в порядку
NoName

57

Сценарії не мають права закривати вікно, яке відкрив користувач. Це вважається ризиком для безпеки. Хоча це не відповідає жодним стандартам, усі постачальники браузерів дотримуються цього ( документи Mozilla ). Якщо це трапляється в деяких браузерах, це помилка безпеки, яка (в ідеалі) дуже швидко виправляється.

Жодна з хак у відповідях на це питання більше не працює, і якщо хтось придумає чергову халепу, врешті-решт і вона перестане працювати.

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


5
Або, ще простіше: взагалі не закривайте вікно. Закінчивши, поверніть користувача назад на домашню сторінку або в інший вид центрального місця.
сутінки-неактив-

2
@duskwuff, Ми проводимо автоматизовані тести щодо цих браузерів. Їх потрібно закрити .
ouflak

2
@ouflak Звичайно, у вашому фреймворці тестування є якийсь спосіб маніпулювати вікнами.
сутінки-неактивні-

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

Не працював у 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.
Мукус

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 ();");
Mike Fuchs,


6

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

Вибачте трохи пізно тут, але я знайшов рішення, принаймні для мого випадку. Тестується на Safari 11.0.3 та Google Chrome 64.0.3282.167


5

Через покращення безпеки в IE ви не можете закрити вікно, якщо воно не відкрито сценарієм. Отже, спосіб обійти це буде дозволити браузеру подумати, що ця сторінка відкрита за допомогою сценарію, а потім закрити вікно. Нижче - реалізація.

Спробуйте це, це працює як шарм!
закрити поточне вікно без підказки 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>

закрити поточне вікно без підказки 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>

Працював із використанням реалізації Chrome Python Eel.
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

@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. Якщо вікно si не відкрито в JS: не працювати.
Денис Чену

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