web-dev-qa-db-fra.com

window.open (url, '_blank'); ne fonctionne pas sur iMac/Safari

J'ai créé une page Web qui vous permet de sélectionner un nom de page dans une liste déroulante, puis de transférer le navigateur sur cette page. Le code qui fait le transfert est

if (url){
    window.open(url, '_blank');
} 

où "url" est la page sélectionnée.

Un journal de la console juste avant la ligne window.open affiche quelque chose comme:

    executing: window.open(http://www.mywebsite.com/44/threats.html, '_blank')

puis les navigateurs ouvrent la page dans un nouvel onglet.

Cela fonctionne correctement sous Windows 7 pour tous les navigateurs, y compris Safari. 

Sur un iMac, cela fonctionne pour Firefox mais pas pour Safari. 

Est-ce que quelqu'un sait pourquoi iMac/Safari ne le fera pas?

33
Steve

Safari bloque tout appel à window.open () effectué dans un appel asynchrone. 

La solution que j'ai trouvée à ce problème consiste à appeler window.open avant de passer un appel asnyc et à définir l'emplacement lorsque la promesse sera résolue.

var windowReference = window.open();

myService.getUrl().then(function(url) {
     windowReference.location = url;
});
87
Jeff Victorino

Pour utiliser window.open () dans safari, vous devez l'insérer dans l'attribut d'événement onclick d'un élément.

Par exemple: <button class='btn' onclick='window.open("https://www.google.com", "_blank");'>Open Google search</button>

18
user2704238

Tiré des commentaires acceptés par Steve le 20 décembre 2013:

En fait, il existe un moyen très simple de le faire: il suffit de cliquer sur "Bloquer les fenêtres contextuelles" dans le navigateur iMac/Safari et il fera ce que je veux.

Pour clarifier, lorsque vous exécutez Safari sur Mac OS X El Capitan:

  1. Safari -> Préférences
  2. Sécurité -> Décocher 'Bloquer les fenêtres contextuelles'
14
jnrcorp

Il y a un paramètre dans Safari sous "Onglets" intitulé Open pages in tabs instead of windows: avec une liste déroulante avec quelques options. Je pense que le vôtre peut être réglé sur Always. En bout de ligne, vous ne pouvez pas compter sur un navigateur qui ouvre une nouvelle fenêtre.

0
Bill Criswell

window.location.assign(url) corrige le problème window.open(url) dans les périphériques ios

0
sama vamsi