Chcę utworzyć link na stronie internetowej, który zamknąłby aktualnie aktywną kartę w przeglądarce bez zamykania innych kart w przeglądarce.
Gdy użytkownik kliknie link zamykający, powinien pojawić się komunikat ostrzegawczy z prośbą o potwierdzenie za pomocą dwóch przycisków: „TAK” i „NIE”. Jeśli użytkownik kliknie „TAK”, zamknij tę stronę, a jeśli „NIE”, nie rób nic.
Jak można to zrobić? Jakieś sugestie?
javascript
html
hyperlink
Naveed
źródło
źródło
Odpowiedzi:
Aby to zrobić, potrzebujesz Javascript. Użyj
window.close()
:Uwaga: sugerowana jest bieżąca karta. Jest to równoważne:
lub możesz określić inne okno.
Więc:
z HTML:
lub:
Jesteś
return false
tutaj, aby zapobiec domyślnemu zachowaniu zdarzenia. W przeciwnym razie przeglądarka spróbuje przejść do tego adresu URL (co oczywiście nie jest).Teraz opcje w
window.confirm()
oknie dialogowym będą OK i Anuluj (nie Tak i Nie). Jeśli naprawdę chcesz Tak i Nie, musisz stworzyć jakieś modalne okno dialogowe Javascript.Uwaga: w powyższym przypadku występują różnice specyficzne dla przeglądarki. Jeśli otworzyłeś okno za pomocą Javascript (via
window.open()
), możesz zamknąć okno javascript. Firefox nie pozwala ci zamykać innych okien. Wierzę, że IE poprosi użytkownika o potwierdzenie. Inne przeglądarki mogą się różnić.źródło
about:config
dom.allow_scripts_to_close_windows = true
może być rozwiązaniem w Firefoksie (może być poważne zagrożenie bezpieczeństwa!)<button type="button" onclick="window.open('', '_self', ''); window.close();">Discard</button>
Zobacz także ten artykułSpróbuj tego
źródło
Ta metoda działa w Chrome i IE:
źródło
open(location, '_self').close();
O ile mi wiadomo, nie jest to już możliwe w Chrome ani FireFox. Nadal może być to możliwe w IE (przynajmniej przed Edge).
źródło
<button type="button" onclick="window.open('', '_self', ''); window.close();">Discard</button>
Zobacz także ten artykułTo jest możliwe. Szukałem tego w całej sieci, ale raz, kiedy wziąłem jedną z ankiet Microsoft, w końcu dostałem odpowiedź.
Spróbuj tego:
spowoduje to zamknięcie bieżącej karty.
źródło
Przetestowany pomyślnie w FF 18 i Chrome 24:
Wstaw w głowę:
HTML:
Kredyty należą się Marcos J. Drake .
źródło
Spróbuj również tego. Pracuje dla mnie we wszystkich trzech głównych przeglądarkach.
źródło
Poniższe działa dla mnie w Chrome 41:
Wypróbowałem kilka pomysłów na FF, w tym otwarcie prawdziwej strony internetowej, ale wydaje się, że nic nie działa. O ile rozumiem, każda przeglądarka zamknie kartę lub okno za pomocą xxx.close (), jeśli tak naprawdę było otwarte przez JS, ale FF, przynajmniej, nie może zostać oszukany w celu zamknięcia karty poprzez otwarcie nowej zawartości wewnątrz tej karty.
Ma to sens, gdy się nad tym zastanowić - użytkownik może nie chcieć, aby JS zamykał kartę lub okno z przydatną historią.
źródło
Przepraszam za nekropostę tego, ale niedawno wdrożyłem lokalnie hostowaną witrynę, która wymagała możliwości zamknięcia bieżącej karty przeglądarki i znalazłem kilka ciekawych obejść, które nie są dobrze udokumentowane w dowolnym miejscu, więc postanowiłem to zrobić.
Uwaga: te obejścia zostały wykonane z myślą o witrynie hostowanej lokalnie i (z wyjątkiem Edge) wymagają specjalnej konfiguracji przeglądarki, więc nie byłyby idealne dla witryn hostowanych publicznie.
Kontekst: w przeszłości skrypt jQuery
window.close()
był w stanie zamknąć bieżącą kartę bez problemu w większości przeglądarek. Jednak współczesne przeglądarki nie obsługują już tego skryptu, potencjalnie ze względów bezpieczeństwa.Google Chrome:
Chrome nie pozwala na uruchomienie skryptu window.close () i nic się nie dzieje, jeśli spróbujesz go użyć. Za pomocą wtyczki Chrome TamperMonkey jednak mamy można użyć metody window.close () jeśli jesteś zawierać
// @grant window.close
w nagłówku UserScript z TamperMonkey.Na przykład mój skrypt (uruchamiany po kliknięciu przycisku o identyfikatorze = „close_page” i naciśnięciu „tak” w oknie podręcznym przeglądarki) wygląda następująco:
Uwaga: To rozwiązanie może zamknąć kartę tylko wtedy, gdy NIE jest to ostatnia otwarta karta. Tak skutecznie nie może zamknąć karty, jeśli spowodowałoby zamknięcie okna, ponieważ jest ostatnią otwartą kartą.
Firefox:
Firefox ma zaawansowane ustawienia, które można włączyć, aby umożliwić skryptom zamykanie okien, co skutecznie włącza tę
window.close()
metodę. Aby włączyć to ustawienie, przejdź do about: config, a następnie wyszukaj i znajdź preferencje dom.allow_scripts_to_close_windows i przełącz je z false na true.Pozwala to na użycie
window.close()
metody bezpośrednio w pliku jQuery, tak jak w przypadku każdego innego skryptu.Na przykład ten skrypt działa idealnie z ustawioną preferencją true:
Działa to znacznie lepiej niż obejście Chrome, ponieważ pozwala użytkownikowi zamknąć bieżącą kartę, nawet jeśli jest to jedyna otwarta karta i nie wymaga wtyczki innej firmy. Jedynym minusem jest to, że umożliwia on uruchamianie tego skryptu na różnych stronach internetowych (nie tylko tych, na których zamierzasz go używać), więc może potencjalnie stanowić zagrożenie bezpieczeństwa, chociaż nie wyobrażam sobie, aby zamknięcie obecnej karty było szczególnie niebezpieczne.
Krawędź:
Rozczarowujące Edge faktycznie działał najlepiej ze wszystkich 3 przeglądarek, które wypróbowałem, i pracował z tą
window.close()
metodą, nie wymagając żadnej konfiguracji. Po uruchomieniuwindow.close()
skryptu dodatkowe wyskakujące okienko ostrzega, że strona próbuje zamknąć bieżącą kartę i pyta, czy chcesz kontynuować.Uwaga końcowa: rozwiązania dla Chrome i Firefox są obejściem problemu, który został celowo wyłączony przez przeglądarkę, potencjalnie ze względów bezpieczeństwa. Oba wymagają również od użytkownika skonfigurowania swoich przeglądarek, aby były kompatybilne wcześniej, więc prawdopodobnie nie byłyby opłacalne w przypadku witryn przeznaczonych do użytku publicznego, ale idealnie nadają się do rozwiązań hostowanych lokalnie, takich jak moje.
Mam nadzieję, że to pomogło! :)
źródło
Jeśli chodzi o osoby, które nadal odwiedzają tę stronę, możesz zamknąć kartę, która jest otwierana przez skrypt LUB za pomocą tagu kotwicy HTML z celem _blank. Oba można zamknąć za pomocą
źródło
to zadziałało dla mnie
źródło
trochę późno, ale to właśnie się dowiedziałem ...
window.close()
będzie działał (IE jest wyjątkiem), jeśli okno, które próbujeszclose()
otworzyć, zostało otwarte za pomocą skryptu przy użyciu metody window.open ().! (zobacz komentarz @killstreet poniżej na temat tagu kotwicy z celem _blank)
TLDR : chrome i firefox pozwalają je zamknąć.
pojawi się błąd konsoli: Skrypty nie mogą zamykać okien, które nie zostały otwarte przez skrypt. jako błąd i nic więcej.
możesz dodać unikalny parametr w adresie URL, aby wiedzieć, czy strona została otwarta ze skryptu (jak czas) - ale to tylko włamanie a nie natywna funkcjonalność i w niektórych przypadkach zawiedzie .
nie mogłem znaleźć żadnego sposobu, aby dowiedzieć się, czy strona została otwarta z open (), czy nie, a close nie wyrzuci i błędów. to NIE zostanie wydrukowane „testu”:
możesz przeczytać w MDN więcej o funkcji close ()
źródło
Oto jak utworzyłbyś taki link:
<a href="javascript:if(confirm('Close window?'))window.close()">close</a>
źródło
Jest to jeden ze sposobów rozwiązania tego samego, zadeklaruj taką funkcję JavaScript
Dodaj następujący wiersz do kodu HTML, aby wywołać funkcję za pomocą
<button>
źródło