Hoe sluit ik het huidige tabblad in een browservenster?

Ik wil een link maken op een webpagina die het momenteel actieve tabblad in een browser zou sluiten zonder andere tabbladen in de browser te sluiten.
Wanneer de gebruiker op de link Sluiten klikt, verschijnt er een waarschuwingsbericht waarin de gebruiker wordt gevraagd om te bevestigen met twee knoppen, “JA” en “NEE”. Als de gebruiker op “JA” klikt, sluit dan die pagina en als “NEE”, doe dan niets.

Hoe kan het? Suggesties?


Antwoord 1, autoriteit 100%

Hiervoor heeft u Javascript nodig. Gebruik window.close():

close();

Opmerking:het huidige tabblad is impliciet. Dit is equivalent:

window.close();

of u kunt een ander venster specificeren.

Dus:

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

met HTML:

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

of:

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

U return falsehier om het standaardgedrag voor de gebeurtenis te voorkomen. Anders zal de browser proberen naar die URL te gaan (wat duidelijk niet het geval is).

Nu de opties op de window.confirm()Dialoogvenster is OK en annuleren (niet ja en nee). Als u echt wilt, wilt u en nee, u moet een soort modaal JavaScript-dialoogvenster maken.

Opmerking: Er is browser-specifieke verschillen met het bovenstaande. Als u het venster hebt geopend met JavaScript (via window.open()), mag u het venster sluiten met JavaScript. Firefox maakt u niet uit om andere ramen te sluiten. Ik geloof dat IE de gebruiker zal vragen om bevestiging. Andere browsers kunnen variëren.


Antwoord 2, Autoriteit 44%

Probeer dit

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

Antwoord 3, Autoriteit 11%

Deze methode werkt in chroom en dwz:

<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>

Antwoord 4, Autoriteit 6%

Voor zover ik kan zien, is het niet langer mogelijk in chroom of firefox. Het kan nog steeds mogelijk zijn in IE (tenminste pre-edge).


Antwoord 5, Autoriteit 3%

Het is mogelijk. Ik heb hiervoor het hele net doorzocht, maar eenmaal toen ik een van de enquête van Microsoft nam, kreeg ik eindelijk het antwoord.

Probeer dit:

window.top.close();

Hiermee wordt het huidige tabblad voor u gesloten.


Antwoord 6, Autoriteit 3%

Sorry dat ik dit plaatste, maar ik heb onlangs een lokaal gehoste site geïmplementeerd die de mogelijkheid nodig had om het huidige browsertabblad te sluiten en ik heb een aantal interessante oplossingen gevonden die nergens goed gedocumenteerd zijn, dus nam ik het op mezelf om dit te doen .

Opmerking:deze tijdelijke oplossingen zijn gedaan met een lokaal gehoste site in gedachten en (met uitzondering van Edge) vereisen dat de browser specifiek is geconfigureerd, dus niet ideaal voor openbaar gehoste sites.


Context:

In het verleden kon het jQuery-script window.close()het huidige tabblad in de meeste browsers probleemloos sluiten. De meeste moderne browsers ondersteunen dit script echter niet meer, mogelijk om veiligheidsredenen.

Huidige functionaliteit:

window.close()werkt op tabbladen die worden geopend door een script, ofdoor een anker met target="_blank"(geopend in een nieuw tabblad)

Zie de opmerking van @killstreet op het antwoord van @calios


Browserspecifieke tijdelijke oplossingen:

Google Chrome:

Chrome staat niet toe dat het script window.close() wordt uitgevoerd en er gebeurt niets als u het probeert te gebruiken. Door de Chrome-plug-in TamperMonkey te gebruiken, kunnen we echter kunnende methode window.close() gebruiken alsu de // @grant window.closeopneemt in de UserScript-header van TamperMonkey.

Bijvoorbeeld, mijn script (dat wordt geactiveerd wanneer er op een knop met id = ‘close_page’ wordt geklikt en als er op ‘ja’ wordt gedrukt in de browserpop-up) ziet er als volgt uit:

// ==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();
        }
    });
})();

Opmerking: Deze oplossing kan alleen het tabblad sluiten als het echter niet het laatste tabblad is geopend. Zo effectief kan het het tabblad niet sluiten als het zou kunnen worden gesloten door het laatste tabblad te zijn.


Firefox:

Firefox heeft een geavanceerde instelling die u kunt inschakelen om scripts toe te staan ​​Windows te sluiten, waardoor de window.close()-methode. Om deze instelling in te schakelen, gaat u naar over: config en zoek en vind de DOM.ALLOW_SCROPTS_TO_CLOSE_WINDOWEN voorkeur en schakel deze van FALSE naar TRUE.

Hiermee kunt u de window.close()-methode rechtstreeks in uw JQuery-bestand zoals u een ander script wilt.

Dit script werkt bijvoorbeeld perfect met de voorkeursgeest naar TRUE:

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

Dit werkt veel beter dan de verchroomde oplossing, omdat de gebruiker het huidige tabblad kan sluiten, zelfs als het het enige tabblad is en geen plug-in van derden vereist. De One Downside is dat het ook mogelijk maakt dat dit script wordt uitgevoerd door verschillende websites (niet alleen degene die u wilt gebruiken om aan te gaan), dus kan mogelijk een veiligheidsgevaar zijn, hoewel ik het niet kan voorstellen dat het huidige tabblad bijzonder gevaarlijk is.


EDGE:

Teleurstellend Edge heeft eigenlijk het beste uit alle 3 browsers uitgevoerd die ik heb geprobeerd, en werkte met de window.close()-methode zonder enige configuratie te vereisen. Wanneer de window.close()script wordt uitgevoerd, waarschuwt u een extra pop-up, waarmee de pagina probeert het huidige tabblad te sluiten en vraagt ​​of u wilt doorgaan.

bewerken:
Dit was op de oude versie van de rand die niet gebaseerd is op chroom. Ik heb het niet getest, maar stel je voor dat het op dezelfde manier zal handelen op chroom op basis van chromium gebaseerde versies


Finities Opmerking: De oplossingen voor zowel Chrome als Firefox zijn tijdelijke oplossingen voor iets dat de browsers opzettelijk uitgeschakeld, mogelijk om veiligheidsredenen. Ze vereisen ook dat de gebruiker hun browsers configureert om vóór de hand compatibel te zijn, dus waarschijnlijk niet levensvatbaar is voor sites die bedoeld zijn voor openbaar gebruik, maar zijn ideaal voor lokaal gehoste oplossingen zoals de mijne.

Ik hoop dat dit heeft geholpen! 🙂


Antwoord 7, Autoriteit 2%

De volgende werken voor mij in Chrome 41:

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

Ik heb verschillende ideeën voor FF geprobeerd, waaronder het openen van een echte webpagina, maar niets lijkt te werken. Voor zover ik begrijp, sluit elke browser een tabblad of venster met xxx.close() als het echtwerd geopend door JS, maar FF kan in ieder geval niet worden misleid om een tabblad te sluiten door te openen nieuwe inhoud op dat tabblad.

Dat is logisch als je erover nadenkt – een gebruiker wil misschien niet dat JS een tabblad of venster sluit met een nuttige geschiedenis.


Antwoord 8

Succesvol getest in FF 18 en Chrome 24:

Invoegen in hoofd:

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

HTML:

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

Credits gaan naar Marcos J. Drake.


Antwoord 9

Probeer dit ook. Werkt voor mij op alle drie de belangrijkste browsers.

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

Antwoord 10

Wat betreft de mensen die deze pagina nog steeds bezoeken, je mag alleen een tabblad sluiten dat is geopend door een script OF door de ankertag van HTML te gebruiken met target _blank. Beide kunnen worden gesloten met de

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

Antwoord 11

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

dit deed het werk voor mij


Antwoord 12

een beetje laat, maar dit is wat ik ontdekte…

window.close()werkt alleen (IE is een uitzondering) als het venster dat u probeert te close()is geopend door een script dat window gebruikt. open() methode.

!(zie de opmerking van @killstreet hieronder over ankertag met doel _blank)

TLDR: chroom & firefox staat toe om ze te sluiten.

u krijgt een consolefout:
Scripts sluiten mogelijk geen vensters die niet door een script zijn geopend.
als een fout en niets anders.

u zou een unieke parameter in de URL kunnen toevoegen om te weten of de pagina is geopend vanuit een script (zoals tijd) – maar het is gewoon een hacken geen native functionaliteit en zal mislukken in sommige gevallen.

ik kon geen manier vinden om te weten of de pagina werd geopend vanuit een open() of niet,
en close zal niet gooien en fouten.
dit wordt NIET afgedrukt“test”:

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

u kunt in MDN meer lezen over de close() functie


Antwoord 13

window.close()werkt niet in 2k21 omdat Scripts may close only the windows that were opened by them.

MAAR als het tabblad in de browser niet handmatig, maar automatisch wordt geopend, dan werkt window.close().

Automatisch (wanneer close()werkt):

  • <a href="/close" target="_blank">de browser opent het adres in het nieuwe tabblad en dit tabblad kan worden gesloten met close()
  • wanneer een nieuw browsertabblad wordt geopend vanuit een andere toepassing (wanneer u op een link in Telegram/Whatsup/Outlook enz. klikt) – OS zal een nieuw tabblad openen en het kan worden gesloten met close()
  • wanneer je het opent met window.open(‘ya.ru’) – kan het zeker worden gesloten met close()

Handmatig (wanneer het niet werkt):

  • wanneer je een nieuwe browser opent en het adres typt.
  • wanneer u op (+) klikt om een nieuw tabblad te openen en het adres intypt

Antwoord 14

Dit is een manier om hetzelfde op te lossen, declareer een JavaScript-functie als deze

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

Voeg de volgende regel toe aan de HTML om de functie aan te roepen met een <button>

<button name='closeIt' onClick="Exit()" >Click to exit </Button>

Antwoord 15

Ik wilde alleen toevoegen dat window.close()werktin 2021, chrome 91, maar niet altijd. Een van de gevallen waarin het werkt als er geen geschiedenis op het tabblad staat(je kunt niet terug).

In mijn geval wilde ik een zelfvernietigend tabblad maken dat na een paar seconden sluit, maar ik worstelde met hoe ik naar de ontwikkelingsserver moest gaan om een nieuw tabblad te vermijden, omdat blijkbaar een nieuw tabblad ook een tabblad is en het wordt opgeslagen in de tabbladgeschiedenis :DI creëerde een link in about:blank tab met target=_blankattribuut en het leidde naar een nieuw tabblad waar de window.close() methode eindelijk werkte!


Antwoord 16

Het is gegarandeerd dat het sluiten van tabbladen in toekomstige browsers niet wordt getolereerd. Het gebruik van scripts zoals hierboven vermeld zal niet werken.

Mijn oplossing was om een Chrome-extensiete gebruiken. Voor een Chrome-extensie kunnen machtigingen voor het manipuleren van tabbladen vereist zijn, zodat het gemakkelijk is om elk tabblad te sluiten van het domein waarin het inhoudsscript van de extensie actief is.

Zo zou het achtergrondscript eruit moeten zien:

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);
}

Het inhoudsscript zou er als volgt uit moeten zien:

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);

Sluit het tabblad door dit in uw toepassing aan te roepen (zorg ervoor dat de inhoudscripts in uw domein zijn ingeschakeld door dat in het manifest op te geven):

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

Wees voorzichtig bij het gebruik hiervan, want het implementeren van Chrome-extensies kan lastig zijn.


Antwoord 17

U kunt window.close()gebruiken om het browsertabblad te sluiten.


Antwoord 18

U kunt deze oplossing proberen om de browser te misleiden om het huidige venster te sluiten met 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

Antwoord 19

Hier is hoe u een dergelijke link wilt maken:

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

Other episodes