de la fenêtre.open(url, '_blank'); ne fonctionne pas sur iMac/Safari
J'ai créer une page web qui vous permet de sélectionner le nom d'une page à partir d'une liste déroulante et puis transfère le navigateur que la page de destination. Le code qui effectue 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 fenêtre.ligne ouverte imprime quelque chose comme:
executing: window.open(http://www.mywebsite.com/44/threats.html, '_blank')
et alors que le navigateur ouvre la page dans un nouvel onglet.
Cela fonctionne très bien sur Windows 7 pour tous les navigateurs, y compris Safari.
Sur un iMac il fonctionne pour Firefox, mais pas pour Safari.
Personne ne sait pourquoi iMac/Safari de ne pas le faire?
Vous devez vous connecter pour publier un commentaire.
Safari est le blocage de tout appel à la fenêtre.open() qui est faite à l'intérieur d'un appel asynchrone.
La solution que j'ai trouvé à ce problème est de la fenêtre d'appel.ouvert avant de faire un asnyc d'appels et de définir l'emplacement lorsque la promesse résout.
window.open
) avant d'appeler l'appel asynchroneÀ l'utilisation de la fenêtre.open() dans safari, vous devez le mettre dans un élément de l'événement onclick du attribut.
Par exemple:
<button class='btn' onclick='window.open("https://www.google.com", "_blank");'>Open Google search</button>
window.open
dans une fonction, et appeler la fonction aveconclick
, Safari pas ouvrir un nouvel onglet. La fonction doit être à l'intérieur de l'cliquer sur l'élément. Une petite correction de la réponse:<button onclick='window.open("https://www.google.com", "_blank");'>Open Google search</button>
.Prises à partir de l'réponses acceptées commentaire par Steve le 20 Décembre 2013:
De préciser, lors de l'exécution Safari sur Mac OS X El Capitan:
Il y a un paramètre dans Safari sous "Onglets" intitulée
Open pages in tabs instead of windows:
avec un menu déroulant avec quelques options. Je pense à la vôtre peut être réglé àAlways
. Ligne de fond est que vous ne pouvez pas compter sur un navigateur à l'ouverture d'une nouvelle fenêtre.window.location.assign(url)
cela corrige lewindow.open(url)
problème dans les appareils iosurl
à être ouvert dans l'onglet en cours, pas dans un nouvel onglet (comme précisé dans la question).La syntaxe correcte est
window.open(URL,WindowTitle,'_blank')
Tous les arguments de la ouverte doivent être des chaînes de caractères. Ils ne sont pas obligatoires, et de la fenêtre peut être abandonné. Donc, justenewWin=open()
fonctionne aussi bien, si vous prévoyez de remplir newWin.document par vous-même.MAIS vous DEVEZ utiliser tous les trois arguments, et le troisième, un jeu à
'_blank'
pour l'ouverture d'une nouvelle vraie fenêtre et pas un onglet.