wake-up-neo.com

Window.open mit 'noopener' öffnet ein neues Fenster anstelle einer neuen Registerkarte

Ich verwendete window.open('') mit '_blank' als zweiten Parameter, um meinen Link in einem neuen Tab zu öffnen. window.open('http://google.com', '_blank')

Vor kurzem habe ich jedoch den dritten Parameter 'noopener' hinzugefügt, damit window.opener auf der neuen Registerkarte null wird und die neue Registerkarte keinen Zugriff auf die übergeordnete Registerkarte/das übergeordnete Fenster hat. d. h. window.opener ist null

window.open('http://google.com', '_blank', 'noopener')

Der obige Code hat also das Sicherheitsproblem gelöst, aber anstatt einen neuen Tab zu öffnen, öffnete sich ein neues Fenster, was nicht erwartet wurde. Meine Browsereinstellungen waren gleich und es wurden keine Änderungen daran vorgenommen.

Kann ich irgendetwas tun, um diesen Code anstelle eines neuen Fensters neu zu öffnen? Ich möchte noopener nicht als dritten Parameter entfernen

7
Chirag Swadia

Ehrlich gesagt denke ich, dass Ihr Code gut ist, aber Sie können eine andere Implementierung ausprobieren:

var yourWindow = window.open();
yourWindow.opener = null;
yourWindow.location = "http://someurl.here";
yourWindow.target = "_blank";
3
Ricardo Costa

Ein anderer Ansatz, der dieses Problem in einer Zeile lösen kann, besteht darin, direkt auf die Opener-Eigenschaft zuzugreifen und diese auf Null zu setzen, um die Tatsache zu nutzen, dass window.open() ein Window-Objekt zurückgibt. Dies funktioniert in allen Browsern, um eine neue Registerkarte mit einem window.opener zu öffnen.

window.open(url, '_blank').opener = null;
7
keimjohn

Dies ist das einzige, was für mich browserübergreifend (IE11, Chrome 66, FF 60, Safari 11.1) funktioniert

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
};
1
Alberto
Object.assign(document.createElement('a'), { target: '_blank', href: 'http://google.com', rel: 'noopener noreferrer'}).click()

Dies ist die Methode, die ich kürzlich verwendet habe. Sie erstellt ein Ankertag und klickt darauf. Wir müssen diese Problemumgehung als Benutzereinstellung verwenden.

https://mathiasbynens.github.io/rel-noopener/

1
Joe Warner