window.open
Не удается надежно открывать всплывающие окна в новой вкладке во всех браузерах
Различные браузеры реализуют поведение window.open
по-разному, особенно в отношении настроек браузера пользователя. Нельзя ожидать, что одно и то же поведение для window.open
будет действовать во всех Internet Explorer , Firefox и Chrome из-за того, что они по-разному обрабатывают настройки браузера пользователя.
Например, пользователи Internet Explorer (11) могут открывать всплывающие окна в новом окне или в новой вкладке, вы не можете заставить пользователей Internet Explorer 11 открывать всплывающие окна определенным образом через window.open
, как указано в в ответе Квентина.
Что касается пользователей Firefox (29), использование window.open(url, '_blank')
зависит от настроек вкладок их браузера, хотя вы все равно можете заставить их открывать всплывающие окна в новом окне, указав ширину и высоту (см. «Что насчет Chrome? "раздел ниже).
Демонстрация
Зайдите в настройки вашего браузера и настройте его так, чтобы всплывающие окна открывались в новом окне.
Internet Explorer (11)
Тестовая страница
После настройки Internet Explorer (11) для открытия всплывающих окон в новом окне, как показано выше, используйте следующую тестовую страницу для проверки 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>
Обратите внимание, что всплывающие окна открываются в новом окне, а не в новой вкладке.
Вы также можете протестировать приведенные выше фрагменты в Firefox (29) с настройкой вкладок, установленной на новые окна, и увидеть те же результаты.
А как насчет Chrome? Он реализует window.open
иначе, чем Internet Explorer (11) и Firefox (29).
Я не уверен на 100%, но похоже, что Chrome (версия 34.0.1847.131 m
) не имеет каких-либо настроек, которые пользователь мог бы использовать, чтобы выбрать, открывать ли всплывающие окна в новом окне или в новой вкладке (например, Firefox и Интернет Explorer есть). Я проверил документацию Chrome по управлению всплывающими окнами, но этого не произошло. Я ничего не упоминаю о подобных вещах.
Кроме того, опять же, похоже, что разные браузеры реализуют поведение window.open
по-разному. В Chrome и Firefox, указание ширины и высоты приведет к появлению всплывающего окна ,, даже если пользователь установил Firefox (29) для открытия новых окон на новой вкладке (как указано в ответах на JavaScript открывается в новом окне, а не на вкладке):
<!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>
Однако тот же фрагмент кода, приведенный выше, всегда будет открывать новую вкладку в Internet Explorer 11, если пользователи устанавливают вкладки в качестве предпочтений своего браузера, даже если не указать ширину и высоту, для них будет открываться новое всплывающее окно.
Таким образом, поведение window.open
в Chrome похоже на открытие всплывающих окон в новой вкладке при использовании в событии onclick
, чтобы открывать их в новых окнах при использовании из консоли браузера (, как отметили другие люди), и открывать их в новых окнах, если они указаны с шириной и рост.
Резюме
Различные браузеры реализуют поведение window.open
по-разному в отношении пользовательских настроек браузера. Нельзя ожидать, что одно и то же поведение для window.open
будет выполняться во всех Internet Explorer, Firefox и Chrome, поскольку они по-разному обрабатывают настройки браузера пользователя.
Дополнительное чтение
person
Community
schedule
01.05.2014
window.open(url);
открыл его на новой вкладке Chrome и Firefox - person Raza Ahmed   schedule 30.08.2013<a>
с помощью JS. - person Qtax   schedule 26.08.2016window.open("https://www.google.co.kr/_/chrome/newtab?ie=UTF-8")
. - person Константин Ван   schedule 23.01.2018<button onClick="clickLink('#link')">Open Your Domain On New Tab</button> <a id="link" href="https://yourdomain.com" target="_blank" hidden></a>
В Javascript -›function clickLink(id) { document.getElementById(id).click(); }
- person ericgm   schedule 06.02.2018