【问题标题】:How to prevent resize and maximize of Javascript window如何防止调整 Javascript 窗口的大小和最大化
【发布时间】:2021-08-13 15:46:17
【问题描述】:

如何防止 Javascript 窗口的大小调整和最大化?

我正在使用以下代码:

var win = window.open(myURL, "_blank", "toolbar=no,menubar=no,scrollbars=yes,dialog=yes,resizable=no,top=100,left=250,width=800,height=530");

尝试了 Stackoverflow 的多种解决方案,但都没有运气。有人可以帮帮我吗?

【问题讨论】:

  • 你不能,而且你绝对不应该。如果您想呈现一个固定大小的模式弹出窗口,请使用您选择的任何尺寸的<dialog>inside 您的页面。如果您想控制用户的整个显示,请向他们请求全屏权限。
  • 为什么不使用 <dialog><iframe> 内部?是什么阻止您使用此设置?

标签: javascript html


【解决方案1】:

完全有可能

...虽然有限

通过监听window resize 事件并使用Window.resizeTo() 函数,可以防止窗口调整大小。

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);
})

这不是跨域解决方案 - 您不能添加事件监听器等。在具有不同来源的窗口上,因为它可能被用于恶意目的。

结果:

[Try it yourself]


支持异源

以下解决方案使用当前 URL 创建一个新窗口,然后用包含所需站点源的 <iframe> 覆盖文档。

为什么我们首先使用当前 URL 打开?因此,我们可以操作 DOM,而不会因这些“阻止具有源的框架“...”访问跨域框架”错误而烦恼,而且我们可以将调整大小事件侦听器附加到窗口(不可能原始解决方案)。

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);
})

结果:

[Try it yourself]

这适用于大多数网站。但是您偶尔会遇到“ 拒绝连接”。

如果您想知道原因,请查看:iframe refuses to display


至于防止窗口最大化,似乎没有任何方法可以以编程方式将其最小化注意:resize 事件在最大化期间被触发Window.minimize() 看起来很有希望,但目前还有 no support for it across any browser

【讨论】:

  • 不起作用。没有什么能阻止我随心所欲地调整浏览器窗口的大小。
  • @Bergi 如果站点在同一个域中,该方法应该可以工作。
  • 您也可以从打开的页面本身调用它,不需要同域访问。
  • 您可能会问自己:为什么我需要这样做。不要强迫用户这样做。
  • @Spectric 这在时间窗口最大化时不起作用。
【解决方案2】:

一般来说,你不能。这是由浏览器配置控制的功能:

Windows.open() MDN FAQ:

如何关闭窗口大小调整或删除工具栏?

您不能强制执行此操作。使用基于 Mozilla 的浏览器的用户可以通过 about:config 中的用户偏好完全控制窗口功能,例如可调整大小、可滚动性和工具栏的存在。由于您的用户应该使用此类窗口(而不是您,作为网络作者),因此最好避免干扰他们的习惯和偏好。我们建议始终将可调整大小和滚动条的存在(如果需要)设置为是,以确保内容的可访问性和窗口的可用性。这符合网络作者和用户的最大利益。

谷歌浏览器也是如此。

【讨论】:

  • 我们是否有任何解决方法示例来解决此问题。
  • 正如answer codepen.io/aleksxor/pen/ZEevJgK 中所述,我想这是你能得到的最接近的东西。虽然大多数时候它看起来真的很丑。还要考虑一个事实,即许多网站对未知/blob/etc 框架祖先都有严格的 CSP 规则。
  • ...在糟糕的时候你仍然可以做这样的事情;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-06
  • 1970-01-01
  • 2011-06-10
  • 2014-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多