Window.open(url, '_blank'); не работает на iMac/Safari
Я создал веб-страницу, позволяющую выбрать имя страницы из выпадающего списка, а затем перевести браузер на эту страницу. Код, который выполняет передачу,
if (url){
window.open(url, '_blank');
}
где выбрана страница "url".
Консольный журнал перед строкой window.open печатает что-то вроде:
executing: window.open(http://www.mywebsite.com/44/threats.html, '_blank')
а затем браузер откроет страницу на новой вкладке.
Это отлично работает в Windows 7 для всех браузеров, включая Safari.
В iMac он работает для Firefox, но не для Safari.
Кто-нибудь знает, почему iMac/Safari этого не сделает?
Ответы
Ответ 1
Safari блокирует любой вызов window.open(), который создается внутри асинхронного вызова.
Решение, которое я нашел для этой проблемы, заключается в вызове window.open перед вызовом asnyc и настройке местоположения при разрешении обещания.
var windowReference = window.open();
myService.getUrl().then(function(url) {
windowReference.location = url;
});
Ответ 2
Чтобы использовать window.open() в сафари, вы должны поместить его в атрибут события onclick элемента.
Например:
<div class='btn' onclick='window.open("https://www.google.com", "_blank");'>Open google search</div>
Ответ 3
Взято из принятого ответа на комментарий от Стива 20 декабря 2013 года:
На самом деле, есть очень простой способ сделать это: просто нажмите "Блокировать всплывающие окна" в браузере iMac/Safari и делает то, что я хочу.
Чтобы уточнить, при запуске Safari в Mac OS X El Capitan:
- Safari → Настройки
- Безопасность → Снимите флажок "Блокировать всплывающие окна"
Ответ 4
В Safari в настройках "Табы" есть отметка Open pages in tabs instead of windows:
с выпадающим списком с несколькими параметрами. Я думаю, что ваш может быть установлен на Always
. В нижней строке вы не можете полагаться на браузер, открывающий новое окно.
Ответ 5
Правильный синтаксис window.open(URL,WindowTitle,'_blank')
Все аргументы в открытии должны быть строками. Они не являются обязательными, и окно можно отбросить. Таким образом, работает только newWin=open()
, если вы планируете самостоятельно заполнить newWin.document.
НО вы ДОЛЖНЫ использовать все три аргумента, а третий - '_blank'
для открытия нового истинного окна, а не вкладки.