Подтвердить что ты не робот

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 этого не сделает?

4b9b3361

Ответ 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' для открытия нового истинного окна, а не вкладки.