Wie verhindere ich die Größenänderung und Maximierung des Javascript-Fensters?
Ich verwende folgenden Code:
var win = window.open(myURL, "_blank", "toolbar=no,menubar=no,scrollbars=yes,dialog=yes,resizable=no,top=100,left=250,width=800,height=530");
Habe mehrere Lösungen von Stackoverflow ausprobiert, hatte aber kein Glück. Kann mir jemand helfen?
Es ist durchaus möglich
… wenn auch eingeschränkt
Durch das Hören auf die Fenster resize
Ereignis und die Verwendung der Window.resizeTo()
Funktion ist es möglich, die Größenänderung des Fensters zu verhindern.
var x = window.open("https://www.stackoverflow.com", "_blank", "toolbar=no,menubar=no,scrollbars=yes,dialog=yes,resizable=no,top=100,left=250,width=800,height=530");
x.addEventListener("resize", () => {
x.resizeTo(800, 530);
})
Dies ist keine Cross-Origin-Lösung – Sie können keine Ereignis-Listener usw. hinzufügen. auf einem Fenster mit einem anderen Ursprung, da es für böswillige Zwecke verwendet werden kann.
Ergebnis:

[Try it yourself]
Unterstützung unterschiedlicher Herkunft
Die folgende Lösung erstellt ein neues Fenster mit der aktuellen URL und überschreibt dann das Dokument mit einer <iframe>
enthält die Quelle der gewünschten Site.
Warum öffnen wir zuerst mit der aktuellen URL? So können wir das DOM manipulieren, ohne uns über diese “Blocked a frame with origin “…” from accessing a cross-origin frame”-Fehler zu ärgern, und auch damit wir den Resize-Event-Listener an das Fenster anhängen können (nicht möglich mit die ursprüngliche Lösung).
var goto = "https://wix.com";
var x = window.open(location, "_blank", "toolbar=no,menubar=no,scrollbars=yes,dialog=yes,resizable=no,top=100,left=250,width=800,height=530");
x.document.write(`<html><head><style>body{margin:0;overflow:hidden;}iframe{width:100%;height:100%;border:0}</style></head><body><iframe src="${goto}"></iframe></body></html>`);
x.addEventListener("resize", () => {
x.resizeTo(800, 530);
})
Ergebnis:

[Try it yourself]
Was auf den meisten Websites funktioniert. Aber Sie werden hin und wieder auf die Meldung „ weigerte sich, eine Verbindung herzustellen“ stoßen.
Wenn Sie wissen möchten, warum, lesen Sie: iframe weigert sich anzuzeigen
Um die Maximierung des Fensters zu verhindern, scheint es keine Möglichkeit zu geben, es programmgesteuert zu minimieren beachten Sie das resize
-Ereignis wird während der Maximierung ausgelöst. Window.minimize()
sieht vielversprechend aus, aber bis jetzt gibt es keine Unterstützung dafür in jedem Browser.
Sie können im Allgemeinen nicht. Das ist eine Funktion, die von der Browserkonfiguration gesteuert wird:
Windows.open() MDN-FAQ:
Wie deaktiviere ich die Größenänderung von Fenstern oder entferne Symbolleisten?
Das kannst du nicht erzwingen. Benutzer mit Mozilla-basierten Browsern haben über Benutzereinstellungen in about:config absolute Kontrolle über Fensterfunktionen wie Größenänderung, Bildlauf und Symbolleistenpräsenz. Da Ihre Benutzer diejenigen sind, die solche Fenster verwenden sollen (und nicht Sie als Webautor), ist es das Beste, zu vermeiden, ihre Gewohnheiten und Vorlieben zu beeinträchtigen. Wir empfehlen, die Größenänderung und das Vorhandensein von Bildlaufleisten (falls erforderlich) immer auf Ja zu setzen, um die Zugänglichkeit zu Inhalten und die Benutzerfreundlichkeit von Fenstern sicherzustellen. Dies ist im besten Interesse sowohl des Webautors als auch der Benutzer.
Dasselbe gilt für Google Chrome.
Sie können nicht, und Sie absolut sollte nicht. Wenn Sie ein modales Popup mit fester Größe rendern möchten, verwenden Sie a
<dialog>
mit welchen Abmessungen Sie wählen, Innerhalb deine Seite. Wenn Sie die Kontrolle über die gesamte Anzeige Ihres Benutzers haben möchten, fordern Sie von ihm Vollbildberechtigungen an.– Bergi
1. Juni 2021 um 0:09 Uhr
Warum nicht mit a
<dialog>
mit einem<iframe>
Innerhalb? Was hindert Sie daran, dieses Setup zu verwenden?– Dima Parzhitsky
3. Juni 2021 um 22:47 Uhr