J'utilisais window.open('')
avec '_blank'
comme second paramètre pour ouvrir mon lien dans un nouvel onglet. window.open('http://google.com', '_blank')
Mais récemment, j'ai ajouté le troisième paramètre 'noopener'
pour que window.opener
devienne nul dans le nouvel onglet et que le nouvel onglet n'ait pas accès à l'onglet/la fenêtre parente. i.e. window.opener
est null
window.open('http://google.com', '_blank', 'noopener')
Le code ci-dessus a donc résolu le problème de sécurité, mais au lieu d'ouvrir un nouvel onglet, une nouvelle fenêtre s'est ouverte, ce qui n'est pas ce à quoi je m'attendais. Les paramètres de mon navigateur étaient les mêmes et aucune modification n’a été apportée.
Est-ce que je peux faire quelque chose pour que ce code ouvre un nouvel onglet au lieu d'une nouvelle fenêtre? Je ne veux pas supprimer noopener
comme troisième paramètre
Honnêtement, je pense que votre code est correct, mais vous pouvez essayer une implémentation différente:
var yourWindow = window.open();
yourWindow.opener = null;
yourWindow.location = "http://someurl.here";
yourWindow.target = "_blank";
Une autre approche permettant de résoudre ce problème sur une seule ligne consiste à accéder directement à la propriété opener et à la définir sur null pour utiliser le fait que window.open()
renvoie un objet Window
. Cela fonctionnera sur tous les navigateurs pour ouvrir un nouvel onglet avec un window.opener
null.
window.open(url, '_blank').opener = null;
C’est la seule chose qui fonctionne pour tous les navigateurs (IE11, Chrome 66, FF 60, Safari 11.1)
function openURL(url) {
var link = document.createElement('a');
link.target = "_blank";
link.href = url;
link.rel = "noopener noreferrer";
document.body.appendChild(link); // you need to add it to the DOM to get FF working
link.click();
link.parentNode.removeChild(link); // link.remove(); doesn't work on IE11
};
Object.assign(document.createElement('a'), { target: '_blank', href: 'http://google.com', rel: 'noopener noreferrer'}).click()
C’est la méthode que j’ai utilisée récemment. Elle crée une balise d’ancrage et clique dessus. Nous devons utiliser cette solution de contournement comme préférence de l’utilisateur.