Javascript, чтобы закрыть IE6, IE7, IE8 и Firefox без подтверждения? - PullRequest
3 голосов
/ 27 октября 2009

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

Он должен работать в Internet Explorer 6, 7, 8 и Firefox.

Ответы [ 3 ]

13 голосов
/ 11 ноября 2009

Я провел некоторое исследование и обнаружил, что невозможно закрыть окно / вкладку в Firefox, если это окно / вкладка не открыта через javascript или если вкладка имеет страницы истории> 1 (т.е. кнопка «Назад» нажимается, потому что вы просматривать веб-страницы).

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

Решение для Internet Explorer 6, 7, 8.

С небольшой помощью функции обнаружения браузера: http://www.quirksmode.org/js/detect.html, вот как закрыть окно без окна подтверждения для нескольких версий IE.

if ((userBrowser.browser == "Explorer" && (userBrowser.version == "8" || userBrowser.version == "7"))) {
        window.open('', '_self', '');
        window.close();
    } else if ((userBrowser.browser == "Explorer" && userBrowser.version == "6")) {
        window.opener = null;
        window.close();
    } else {
        window.opener = '';
        window.close(); // attempt to close window first, show user warning message if fails
        alert("To avoid data corruption/loss. Please close this window immedietly.");
    }

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

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

1 голос
/ 27 октября 2009

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

Вот что я рекомендую:

  1. Убить зарегистрированный сеанс на основе таймаута (на стороне сервера). По истечении времени ожидания перезагрузка страницы должна перенаправляться только на страницу входа.
  2. На стороне клиента периодически проверяйте условия тайм-аута и перенаправляйте на страницу входа в систему или на другую страницу, не требующую защиты.

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

1 голос
/ 27 октября 2009

Это было бы серьезным нарушением безопасности. Вы никогда не сможете сделать это.

Однако вы можете закрыть дочерние окна, которые открыли родительские окна. Скажем, вы открыли всплывающее окно с родительским окном, в этом же родительском окне может быть кнопка для закрытия дочернего элемента. Никогда не браузер.

...