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 и Internet 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 из-за различных способов, которыми они обрабатывают настройки браузера пользователя.
Дополнительное Чтение