Як закрити поточну вкладку у вікні браузера?


434

Я хочу створити на веб-сторінці посилання, яке закривало б активну вкладку в браузері, не закриваючи інші вкладки в браузері.
Коли користувач натискає тісне посилання, повинно з’явитися повідомлення-попередження з проханням підтвердити його двома кнопками «ТАК» та «НІ». Якщо користувач натискає "ТАК", закрийте цю сторінку і якщо "НІ", нічого не робіть.

Як це можна зробити? Будь-які пропозиції?


Я можу запізнитися тут, але браузерам це заважає чомусь. <br> <br> Подумайте про себе, намагаючись закрити вікно знову і знову, і це не закривається, оскільки це робить " якщо ні " частина вашого питання, яка це "нічого не робити". <br> <br> Це точно буде дратувати!
Мухаммад Осама

Відповіді:


502

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


386
Ви не можете закрити будь-яку вкладку через JavaScript. "Цей метод дозволено викликати лише для Windows, які були відкриті скриптом методом window.open." Іншими словами, ви можете використовувати JavaScript лише для закриття вікна / вкладки, породженого через JavaScript.
Райан Джой

7
-1 Не працює хром 30 ПК, інші відповіді показують, як відкрити вікно в поточній вкладці, а потім закрити його
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> Дивіться також в цій статті
Герінг

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>

56
Простіше:open(location, '_self').close();
uınbɐɥs

Це добре працювало в IE 11, але не працювало в Chrome 38
Ян Дюран

31

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


2
Це працює (принаймні) в Chrome 62: <button type="button" onclick="window.open('', '_self', ''); window.close();">Discard</button> Дивіться також в цій статті
Герінг

@hering Ну, стаття з 2006 року, але якщо ви знайшли щось, що працює, це чудова новина і, можливо, допоможе людям, які читають це далеко. Дякую, що поділились.
Гай Шалнат

Питання стосувалося закриття поточної активної вкладки з неї. Як ви кажете, це неможливо в Chrome або Firefox. Це має бути прийнятою відповіддю.
декати

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>

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


Не належить до хрому: "Сценарії можуть закривати лише вікна, які були відкриті нею".
Сезар Леон

7

Спробуйте і це. Працює для мене на всіх трьох основних браузерах.

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

не працює на Firefox Quantum 68.0.1
Zeke

7

У Chrome 41 працює для мене наступне:

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

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

Це має сенс, коли ви думаєте про це - користувач може не захотіти, щоб JS закривав вкладку чи вікно, що має корисну історію.


Chrome: 'Uncaught TypeError: Неможливо встановити властивість' innerHTML 'of null'
Франциско Корралес Моралес

5

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

Примітка. Ці обхідні шляхи були зроблені на увазі локально розміщеному веб-сайті, і (за винятком Edge) потрібно, щоб браузер був спеціально налаштований, тому не було б ідеально для публічно розміщених сайтів.

Контекст: Раніше сценарій jQuery window.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();
        }
    });
})();

Примітка. Це рішення може закрити вкладку, лише якщо вона НЕ остання відкрита вкладка. Таким чином, він не може закрити вкладку, якщо це призведе до закриття вікна, відкривши останню вкладку.

Firefox:

Firefox має розширені налаштування, за допомогою яких можна дозволити скриптам закривати вікна, ефективно вмикаючи window.close()метод. Щоб увімкнути цей параметр, перейдіть до про: 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 фактично виконав найкращі з усіх 3-х браузерів, які я пробував, і працював із window.close()методом, не вимагаючи жодної конфігурації. Коли window.close()сценарій запускається, додаткове спливаюче вікно повідомляє про те, що сторінка намагається закрити поточну вкладку і запитує, чи потрібно продовжувати.

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

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

Сподіваюся, це допомогло! :)


5

Що стосується людей, які все ще відвідують цю сторінку, вам дозволяється лише закрити вкладку, відкриту скриптом АБО, використовуючи прив’язний тег HTML з цільовим _blank. Обидва з них можна закрити за допомогою

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

Це працює у кожному сучасному браузері. IE11 та Edge 17 показують підтвердження підтвердження, але воно все ще працює.
Фабіан фон Еллертс

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

це зробило роботу для мене


1

трохи пізно, але це те, що я дізнався ...

window.close() буде працювати (IE є винятком), якщо вікно, яке ви намагаєтеся close() було відкрито скриптом методом window.open ().

(див. коментар @killstreet нижче про тег прив’язки з цільовим _blank)

TLDR : хром та firefox дозволяють закрити їх.

ви отримаєте помилку консолі: скрипти можуть не закривати вікна, які не були відкриті скриптом. як помилка і більше нічого.

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

я не міг знайти жодного способу дізнатись, відкрилася сторінка із відкритого () чи ні, і закриття не призведе до помилок та помилок. це НЕ надрукує "тест":

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

ви можете прочитати в MDN докладніше про функцію close ()


2
Це не лише вкладки, відкриті сценаріями, також дозволено закривати тег прив’язки з цільовим _blank. Поки що перевірені в хромі та firefox, і, ймовірно, дозволяють закрити вкладки, які були відкриті тегом якоря.
killstreet


-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>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.