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

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

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

25 ответов

Решение

Вам понадобится 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 запросит у пользователя подтверждение. Другие браузеры могут отличаться.

Попробуй это

<a href="javascript:window.open('','_self').close();">close</a>

Этот метод работает в 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>

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

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

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

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

Гугл Хром:

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

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

// ==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() скрипт запускается, дополнительное всплывающее окно предупреждает вас о том, что страница пытается закрыть текущую вкладку, и спрашивает, хотите ли вы продолжить.

https://stackru.com/images/a3b8ca4046e967c3b0e83accae5359393516249f.png

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

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

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

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

window.top.close();

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

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

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

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

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

не работает в 2k21 потому что Scripts may close only the windows that were opened by them.

НО если вкладка открывается в браузере не вручную, а автоматически - то window.close() работает.

Автоматически (когда работает):

  • <a href="/close" target="_blank"> браузер откроет адрес в новой вкладке, и эту вкладку можно закрыть с помощью
  • при открытии новой вкладки браузера из другого приложения (при нажатии ссылки в Telegram / Whatsup / Outlook и т. д.) ОС откроет новую вкладку, и ее можно закрыть с помощью
  • при открытии с помощью window.open('ya.ru') - наверняка его можно закрыть с помощью close()

Вручную (когда не работает):

  • когда вы открываете свежий браузер и вводите адрес.
  • когда вы нажимаете (+), чтобы открыть новую вкладку, и вводите адрес

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

<script>
window.close();
</script>

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

<!-- saved from url=(0014)about:internet -->
<a href="#" onclick="javascript:window.close();opener.window.focus();" >Close Window</a>

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

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

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

HTML:

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

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

<button class="closeButton" style="cursor: pointer" onclick="window.close();">Close Window</button>

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

Гарантируется, что закрытие вкладок не будет допущено ни в каких будущих браузерах. Использование сценариев, подобных упомянутым выше, не сработает.

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

Вот так должен выглядеть фоновый скрипт:

      chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) {
    console.log(sender)
    console.log(message)
    if(message.closeThis) {
        closeTab(sender.tab.id)
    }
});

const closeTab = id => {
    console.log("Closing tab");
    chrome.tabs.remove(id);
}

Скрипт содержимого должен выглядеть так:

      window.addEventListener("message", (event) => {
    // Only accept messages from ourselves
    if (event.source !== window)
        return;

    if (event.data.type && (event.data.type === "APPLICATION/CLOSE")) {
        console.log("Content script received APPLICATION/CLOSE event");
        chrome.runtime.sendMessage({closeThis: true});
    }
}, false);

Закройте вкладку, вызвав это в своем приложении (убедитесь, что сценарии содержимого включены в вашем домене, указав это в манифесте):

      window.postMessage({ type: "APPLICATION/CLOSE" }, "*");

Будьте осторожны при использовании, потому что развертывание расширений Chrome может быть проблемой.

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

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

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

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

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

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

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

Я просто хотел добавить это window.close() работает 2021 хром 91, но не всегда. Один из случаев, когда срабатывает, если во вкладке нет истории (назад нельзя).

В моем случае я хотел создать самоуничтожающуюся вкладку, которая закрывается через несколько секунд, но я боролся с тем, как перейти на сервер разработки, избегая новой вкладки, потому что, по-видимому, новая вкладка также является вкладкой и сохраняется в истории вкладок: DI created ссылка в about: пустая вкладка с target=_blank атрибут, и это приводило к новой вкладке, где наконец сработал метод window.close ()!

Это действительно возможно, и это так же просто, как:

        window.opener = self
  window.close()

(диалог подтверждения/отмены опущен для краткости)

Работает для Chrome версии 111.0.xxxx.xxx

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

@VityaSchel добавил для меня самое важное примечание: /questions/15539644/kak-zakryit-tekuschuyu-vkladku-v-okne-brauzera/58106633#58106633

просто хотел добавить, что window.close() работает в 2021 году, хром 91, но не всегда. Один из случаев, когда срабатывает, если во вкладке нет истории (вернуться назад нельзя).

В 2023 году такое поведение также присутствует в Firefox и Edge. Новые вкладки без какой-либо истории страниц, которые вызываютwindow.close()действительно закрыть себя.




Это может быть комментарий, но моя репутация недостаточно высока.

Из-за строгого поведения браузера,window.close()будет работать, только если он открыт

Но я сделал решение для этого!

  1. Добавьте пустой хэштег сwindow.open(...)когда он НЕ включен
  2. Когда наступит идеальное время для закрытия, позвонитеwindow.close
  3. Если 2. вернул ошибку, замените любой хэштег или параметры HTTP пустым хэштегом и, наконец, закройте окно.
      <button onclick="myFunction()">Close</button>
<script>
if (location.href.indexOf("#") == -1) {
    window.open(location.href + "#", "_self")
}

function myFunction() {
  try {
    window.close()
  } catch (err) {
    window.open(location.href.substring(0, location.href.indexOf("?")).substring(0, location.href.indexOf("#")) + "#", "_self")
    window.close()
  }
}
</script>

Типcloseв этой живой демонстрации

      As stated previously by RixTheTyrunt here, due to security, Modern browser behavior does not allow window.close to work unless is opened by window.open or under other strict circumstances(like opening a new tab with minimal interaction).
When a page attempts to post a form, once that form interacts; window.close does not work(at least for me in several browsers: ff, edge, chrome...).

I liked a lot the solution by Thailandian, but contains document.write which is  frown upon.

I tried several solutions from this page and from other, but is by design.
This is what I considered a workaround. The main idea is to let the User know.

Best regards,
Thanks for reading.  

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

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

Это будет раздражать наверняка!

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

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

Вы можете попробовать это решение, чтобы заставить браузер закрыть текущее окно с помощью JavaScript + HTML:

JS:

      function closeWindow() {
 if(window.confirm('Are you sure?')) {
  window.alert('Closing window')
  window.open('', '_self')
  window.close()
 }
 else {
  alert('Cancelled!')
 }
}

HTML:

      Some content
<button onclick='closeWindow()'>Close Current Window!</button>
More content

Это один из способов решения этой проблемы, объявить функцию 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>

Вы можете использовать window.close() закрыть вкладку браузера.

Другие вопросы по тегам