window.open
Nie można niezawodnie otwierać wyskakujących okienek w nowej karcie we wszystkich przeglądarkach
Różne przeglądarki implementują zachowanie window.open
na różne sposoby, szczególnie w odniesieniu do preferencji przeglądarki użytkownika. Nie można oczekiwać, że to samo zachowanie window.open
będzie prawdziwe we wszystkich przeglądarkach Internet Explorer, Firefox i Chrome, ze względu na różne sposoby, w jakie obsługują preferencje przeglądarki użytkownika.
Na przykład użytkownicy programu Internet Explorer (11) mogą otwierać wyskakujące okienka w nowym oknie lub nowej karcie, nie można zmusić użytkowników programu Internet Explorer 11 do otwierania wyskakujących okienek w określony sposób window.open
, jak wspomniano w odpowiedzi Quentina .
W przypadku użytkowników przeglądarki Firefox (29) korzystanie z nich window.open(url, '_blank')
zależy od preferencji kart przeglądarki, ale nadal można zmusić ich do otwierania wyskakujących okienek w nowym oknie, określając szerokość i wysokość (patrz sekcja „Co z Chrome?” Poniżej).
Demonstracja
Przejdź do ustawień przeglądarki i skonfiguruj ją, aby otwierać wyskakujące okienka w nowym oknie.
Internet Explorer (11)
Strona testowa
Po skonfigurowaniu przeglądarki Internet Explorer (11) do otwierania wyskakujących okienek w nowym oknie, jak pokazano powyżej, użyj następującej strony testowej do przetestowania window.open
:
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
</head>
<body>
<button onclick="window.open('https://stackoverflow.com/q/4907843/456814');">
<code>window.open(url)</code>
</button>
<button onclick="window.open('https://stackoverflow.com/q/4907843/456814', '_blank');">
<code>window.open(url, '_blank')</code>
</button>
</body>
</html>
Zauważ, że wyskakujące okienka są otwierane w nowym oknie, a nie w nowej karcie.
Możesz również przetestować te fragmenty powyżej w przeglądarce Firefox (29) z preferencjami tabulatorów ustawionymi na nowe okna i zobaczyć te same wyniki.
Co z Chrome? Implementuje się window.open
inaczej niż Internet Explorer (11) i Firefox (29).
Nie jestem w 100% pewien, ale wygląda na to, że Chrome (wersja 34.0.1847.131 m
) nie wydaje się mieć żadnych ustawień, których użytkownik może użyć, aby wybrać, czy otwierać wyskakujące okienka w nowym oknie lub nowej karcie (np. Firefox i Internet Explorer mieć). Sprawdziłem dokumentację Chrome do zarządzania wyskakującymi oknami , ale nic nie wspominało o takich rzeczach.
Również po raz kolejny różne przeglądarki wydają się inaczej wdrażać zachowanie window.open
. W Chrome i Firefox określenie szerokości i wysokości wymusi wyskakujące okienko, nawet jeśli użytkownik ustawił Firefoksa (29) na otwieranie nowych okien w nowej karcie (jak wspomniano w odpowiedziach na JavaScript otwieranie w nowym oknie, a nie na karcie ) :
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
</head>
<body>
<button onclick="window.open('https://stackoverflow.com/q/4907843/456814', 'test', 'width=400, height=400');">
<code>window.open(url)</code>
</button>
</body>
</html>
Jednak ten sam fragment kodu powyżej zawsze otworzy nową kartę w Internet Explorerze 11, jeśli użytkownicy ustawią karty jako preferencje przeglądarki, nawet brak określenia szerokości i wysokości wymusi dla nich nowe wyskakujące okno.
Tak więc zachowanie window.open
w Chrome wydaje się być otwierane wyskakujące okienka w nowej karcie, gdy stosuje się w onclick
przypadku, aby otworzyć je w nowych oknach, gdy używana z konsoli przeglądarki ( jak wspomniano przez innych ludzi ), i otworzyć je w nowych oknach, gdy określone za pomocą szerokości i wysokości.
Podsumowanie
Różne przeglądarki window.open
różnie implementują zachowanie w zależności od preferencji użytkowników. Nie można oczekiwać, że to samo zachowanie window.open
będzie prawdziwe we wszystkich przeglądarkach Internet Explorer, Firefox i Chrome, ze względu na różne sposoby, w jakie obsługują preferencje przeglądarki użytkownika.
Dodatkowe czytanie