Как закрыть текущую вкладку в окне браузера?

436

Я хочу создать на веб-странице ссылку, которая закрывала бы активную в настоящее время вкладку в браузере, не закрывая другие вкладки в браузере.
Когда пользователь нажимает на ссылку закрытия, должно появиться предупреждающее сообщение с просьбой подтвердить его двумя кнопками «ДА» и «НЕТ». Если пользователь нажимает «ДА», закройте эту страницу и, если «НЕТ», ничего не делайте.

Как это можно сделать? Какие-либо предложения?

Навид
источник
Я могу опоздать, но браузеры по какой-то причине предотвращают это. <br> <br> Подумайте о себе, пытаясь закрыть окно снова и снова, и оно не закрывается, поскольку выполняет часть « если нет » из вашего вопроса, который это «ничего не делать». <br> <br> Это наверняка будет раздражать!
Мухаммед Усама

Ответы:

503

Вам понадобится Javascript для этого. Используйте window.close():

close();

Примечание: текущая вкладка подразумевается. Это эквивалентно:

window.close();

или вы можете указать другое окно.

Так:

function close_window() {
  if (confirm("Close Window?")) {
    close();
  }
}

с HTML:

<a href="javascript:close_window();">close</a>

или:

<a href="#" onclick="close_window();return false;">close</a>

Вы return false здесь, чтобы предотвратить поведение по умолчанию для события. В противном случае браузер будет пытаться перейти на этот URL-адрес (что, очевидно, не так).

Теперь параметры в window.confirm()диалоговом окне будут ОК и Отмена (не Да и Нет). Если вы действительно хотите Да и Нет, вам нужно создать модальное диалоговое окно Javascript.

Примечание: есть определенные для браузера различия с вышеупомянутым. Если вы открыли окно с помощью Javascript (через window.open()), то вы можете закрыть окно с помощью Javascript. Firefox запрещает вам закрывать другие окна. Я полагаю, что IE запросит у пользователя подтверждение. Другие браузеры могут отличаться.

Клетус
источник
387
Вы не можете закрыть любую вкладку с помощью JavaScript. «Этот метод можно вызывать только для окон, которые были открыты скриптом с использованием метода window.open». Другими словами, вы можете использовать JavaScript только для того, чтобы закрыть окно / вкладку, которое было создано с помощью JavaScript.
Райан Джой
7
-1 Не работает chrome 30 PC, другие ответы показывают, чтобы открыть окно в текущей вкладке, а затем закрыть его
markasoftware
2
В about:config dom.allow_scripts_to_close_windows = trueможет быть решение в Firefox (может быть большой риск безопасности!)
Непомуцкий Frädrich
6
Браузер не допускает такого поведения. Javascript может закрыть только открытую вкладку.
Эдвард Кеннеди
1
Это работает (по крайней мере) в Chrome 62: <button type="button" onclick="window.open('', '_self', ''); window.close();">Discard</button> см. Также эту статью
17
247

Попробуй это

<a href="javascript:window.open('','_self').close();">close</a>
Даниэль Шен
источник
2
Работа в Firefox 31.0
Адриан Карр
1
Недостатком этого решения является то, что запрос на получение отправляется на сервер. Но с другой стороны, я не нашел другого решения.
100
18
Делая это из выводов консоли Chrome «Скрипты могут закрывать только те окна, которые были им открыты»
парламент,
Не работает Скрипты могут закрывать только те окна, которые были им открыты.
Роман Лосев
1
Не работает в Chrome 60.0.3079.0: «Скрипты могут закрывать только те окна, которые были открыты им».
Our_Benefactors
65

Этот метод работает в Chrome и IE:

<a href="blablabla" onclick="setTimeout(function(){var ww = window.open(window.location, '_self'); ww.close(); }, 1000);">
    If you click on this the window will be closed after 1000ms
</a>
Palesz
источник
56
Проще:open(location, '_self').close();
13
Это хорошо работало в IE 11, но не работало в Chrome 38
Yann Duran
31

Насколько я могу сказать, это больше невозможно в Chrome или FireFox. Это все еще возможно в IE (по крайней мере, до Edge).

Гай Шалнат
источник
2
Это работает (по крайней мере) в Chrome 62: <button type="button" onclick="window.open('', '_self', ''); window.close();">Discard</button> см. Также эту статью
17
@hering Ну, статья за 2006 год, но если вы нашли что-то, что работает, это отличная новость и, возможно, поможет людям, которые читают дальше. Спасибо, что поделился.
Гай Шалнат
Речь шла о закрытии текущей активной вкладки внутри этой вкладки. Как вы говорите, это невозможно в Chrome или Firefox. Это должен быть принятый ответ.
decates
14

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

попробуй это:

window.top.close();

это закроет текущую вкладку для вас.


источник
12
«Сценарии могут закрывать только те окна, которые были открыты им». на Chrome 50.
Хаски
7

Успешно протестировано в FF 18 и Chrome 24:

Вставьте в голову:

<script>
    function closeWindow() {
        window.open('','_parent','');
        window.close();
    }
</script> 

HTML:

<a href="javascript:closeWindow();">Close Window</a>

Кредиты идут к Маркосу Дж. Дрейку .

Julesfrog
источник
Не использовать хром: «Сценарии могут закрывать только те окна, которые были им открыты».
Сезар Леон
7

Попробуйте это тоже. Работаю для меня во всех трех основных браузерах.

<!-- saved from url=(0014)about:internet -->
<a href="#" onclick="javascript:window.close();opener.window.focus();" >Close Window</a>
Бхавин шах
источник
не работает на Firefox Quantum 68.0.1
Зик
7

В Chrome 41 у меня работает следующее:

function leave() {
  var myWindow = window.open("", "_self");
  myWindow.document.write("");
  setTimeout (function() {myWindow.close();},1000);
}

Я попробовал несколько идей для FF, включая открытие реальной веб-страницы, но, похоже, ничего не работает. Насколько я понимаю, любой браузер закроет вкладку или окно с помощью xxx.close (), если он действительно был открыт JS, но FF, по крайней мере, нельзя заставить закрыть вкладку, открыв новый контент внутри этой вкладки.

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

Thailandian
источник
Chrome: 'Uncaught TypeError: Невозможно установить свойство' innerHTML 'для null'
Франциско Корралес Моралес
5

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

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

Контекст: в прошлом скрипт jQuerywindow.close() мог без проблем закрывать текущую вкладку в большинстве браузеров. Однако современные браузеры больше не поддерживают этот сценарий, возможно, по соображениям безопасности.

Гугл Хром:

Chrome не позволяет запускать скрипт window.close (), и ничего не происходит, если вы попытаетесь его использовать. Однако с помощью плагина Chrome TamperMonkey мы можем использовать метод window.close (), если вы // @grant window.closeвключите в заголовок UserScript TamperMonkey.

Например, мой скрипт (который запускается при нажатии кнопки с id = 'close_page' и нажатии 'yes' во всплывающем окне браузера) выглядит следующим образом:

// ==UserScript==
// @name         Close Tab Script
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  Closes current tab when triggered
// @author       Mackey Johnstone
// @match        http://localhost/index.php
// @grant        window.close
// @require      http://code.jquery.com/jquery-3.4.1.min.js
// ==/UserScript==

(function() {
    'use strict';
    $("#close_page").click(function() {
        var confirm_result = confirm("Are you sure you want to quit?");
        if (confirm_result == true) {
            window.close();
        }
    });
})();

Замечания: Это решение может закрыть вкладку, только если она НЕ является последней открытой вкладкой. Так эффективно, он не может закрыть вкладку, если это приведет к закрытию окна, будучи последней открытой вкладкой.

Fire Fox:

Firefox имеет расширенные настройки, которые вы можете разрешить сценариям закрывать окна, эффективно включив window.close()метод. Чтобы включить этот параметр, перейдите в about: config, затем найдите и найдите параметр dom.allow_scripts_to_close_windows и переключите его с false на true.

Это позволяет вам использовать window.close()метод непосредственно в вашем файле jQuery, как и любой другой скрипт.

Например, этот скрипт прекрасно работает с настройкой true:

<script>
  $("#close_page").click(function() {
    var confirm_result = confirm("Are you sure you want to quit?");
    if (confirm_result == true) {
      window.close();
    }
  });
</script>

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

Край:

К сожалению, Edge показал лучший результат из всех трех браузеров, которые я пробовал, и работал с window.close()методом без какой-либо настройки. Когда window.close()скрипт запускается, дополнительное всплывающее окно предупреждает вас о том, что страница пытается закрыть текущую вкладку, и спрашивает, хотите ли вы продолжить.

введите описание изображения здесь

Заключительное примечание: . Решения для Chrome и Firefox - это обходные пути, которые браузеры намеренно отключили, возможно, из соображений безопасности. Они также требуют, чтобы пользователь настраивал свои браузеры так, чтобы они были совместимы заранее, поэтому, скорее всего, они не будут жизнеспособными для сайтов, предназначенных для общего пользования, но идеально подходят для локально размещенных решений, таких как мой.

Надеюсь, это помогло! :)

Макки Джонстон
источник
5

Что касается людей, которые все еще посещают эту страницу, вам разрешено только закрывать вкладку, которая открывается скриптом ИЛИ, используя тег привязки HTML с target _blank. Оба они могут быть закрыты с помощью

<script>
    window.close();
</script>
killstreet
источник
Это работает в любом современном браузере. IE11 и Edge 17 показывают предупреждение о подтверждении, но оно все еще работает.
Фабиан фон Эллертс
1
<button class="closeButton" style="cursor: pointer" onclick="window.close();">Close Window</button>

это сделало работу для меня

pikax
источник
1

немного поздно, но это то, что я узнал ...

window.close()будет работать (IE является исключением), если окно, которое вы пытаетесь close()открыть, было открыто скриптом с помощью метода window.open ().

! (см. комментарий @killstreet ниже о теге привязки с целью _blank)

TLDR : chrome & firefox позволяют закрывать их.

вы получите ошибку консоли: Скрипты могут не закрывать окна, которые не были открыты скриптом. как ошибка и больше ничего.

Вы можете добавить уникальный параметр в URL , чтобы знать , если страница была открыта из сценария (например , время) - но его просто хак , а не родная функциональность и неудача в некоторых случаях.

Я не мог найти какой-либо способ узнать, была ли страница открыта из open () или нет, и закрыть не будет выбрасывать и ошибки. это НЕ будет печатать «тест»:

try{
  window.close();
}
catch (e){
  console.log("text");
}

Вы можете прочитать в MDN больше о функции close ()

calios
источник
2
Это не только вкладки, которые были открыты скриптами, также разрешено закрывать тег привязки с target _blank. До сих пор тестировались в chrome и firefox, и оба, кажется, позволяют закрывать вкладки, которые были открыты тегом привязки.
killstreet
-1

Вот как бы вы создали такую ​​ссылку:

<a href="javascript:if(confirm('Close window?'))window.close()">close</a>

Эрик Миккельсен
источник
-1

Это один из способов решения этой проблемы, объявить функцию JavaScript, как это

<script>
  function Exit() {
     var x=confirm('Are You sure want to exit:');
     if(x) window.close();
   }
</script>

Добавьте следующую строку в HTML, чтобы вызвать функцию, используя <button>

<button name='closeIt' onClick="Exit()" >Click to exit </Button>
Мохсин Чаудхари
источник