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?
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;
});
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>
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:
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.
window.location.assign(url)
corrige le problème window.open(url)
dans les périphériques ios