禁用浏览器窗口调整大小功能

14

首先... 我没有任何恶意让用户遭受弹出窗口或类似的东西。我只想防止用户调整已经导航到的网页的浏览器窗口大小(意味着我无法访问/不想使用window.open();)。我已经研究了很长时间,但似乎找不到直接的答案。

我感觉自己在某个方面上有所进展:

 $(window).resize(function() {
     var wWidth = window.width,
     wHeight = window.height;
     window.resizeBy(wWidth, wHeight);
 });

我一直尝试着做某件事,但一无所获。我想这应该是可能的,是吗?如果是的话,我一定会非常感激您的帮助。

谢谢


5
为什么?浏览器窗口本不应该受到限制。如果最终用户想要将其移动到另一台屏幕并且无法调整大小,这可能会给最终用户带来潜在问题。例如,两个分辨率不同的屏幕。 - John Hartsock
4
你绝对不应该尝试改变核心操作系统级别功能的行为(例如阻止窗口调整大小)。永远不要这样做。 - Christian
2
很不幸,我在这个问题上受到NDA的限制,但@Derek的想法是正确的。我知道这与我们所有人所信仰的一切都背道而驰,这就是为什么我犹豫是否要用这个问题来打扰社区。关于理由的简短回答是,这个网站只会在特定(和其他受控)条件下被访问。用户在导航到它时知道可以期望什么。谢谢大家。 - Matt Rose
6
@ChristianVarga 哈哈大笑....你永远都不应该这样假设。有许多情况和情形可能需要这样做。也许这个人正在一个受控制的环境中创建一个网站(比如在工作中等),而不仅仅是一些随意的公共互联网网站。对于大多数网站来说?你可能是正确的。但对于所有可能的情况来说?你是错误的。 - Fata1Err0r
1
@ChristianVarga 同意,核心行为存在是有原因的,有时这些原因并不总是适用或需要改变。那么你该怎么办?像你建议的那样创建一个包装器,我对于这种情况并不反对。然而,并不是每个人都是这样,也不是他们可能遇到的每种情况。所以不要误解,我并不是在说“去系统”,而只是指出并非每种情况/情形都是相同的,如果他们需要以那种方式去处理,他们可以这样做。遵守法律总是好的,但有时打破它是必要的。 - Fata1Err0r
显示剩余3条评论
3个回答

27

你可以先确定一个明确的大小。

var size = [window.width,window.height];  //public variable

那么就这样做:

$(window).resize(function(){
    window.resizeTo(size[0],size[1]);
});

演示:http://jsfiddle.net/DerekL/xeway917/


Q: 这不会导致无限的调整大小循环吗? - user1147171

好问题。不会导致无限调整大小循环。根据W3C规范,只有在文档视图已调整大小时才必须分派resize事件。当resizeTo函数尝试第二次执行时,窗口将具有与刚设置的完全相同的尺寸,因此浏览器不会触发调整大小事件,因为尺寸未更改。


1
那是一个非常恼人的“特性”。如果它能够正常工作(但鉴于原始帖子,它不会),用户将被锁定在窗口最初打开时的任何大小,这可能有用,但可能并不是。 - RobG
1
谷歌浏览器不再允许您修改窗口大小了吗? - Purag
1
@Purmou - 你为什么这么说?如果你使用window.open打开一个窗口,那么你可以改变窗口的大小。 - Derek 朕會功夫
如果窗口有多个选项卡,则无法调整其大小,您只能调整由您的脚本打开且您拥有处理程序的窗口的大小。 - Voonic
对我来说,这段代码似乎会导致无限循环,因为 window.resizeTo 触发了 window(resize) 处理程序,而处理程序又执行了 window.resizeTo - user1147171
显示剩余3条评论

2
我今天需要做这件事情(由chrome插件打开的面板),但我需要让用户改变窗口高度,却防止他们改变窗口宽度。
@ Derek的解决方案让我接近成功,但我必须对其进行微调以允许高度更改,因此可能出现无尽的调整循环,因此我需要防止这种情况。这是我的Dereck答案版本,对我而言运行得非常好:
var couponWindow = {
  width: $(window).width(),
  height: $(window).height(),
  resizing: false
};
var $w=$(window);
$w.resize(function() {
  if ($w.width() != couponWindow.width && !couponWindow.resizing) {
    couponWindow.resizing = true;
    window.resizeTo(couponWindow.width, $w.height());
  }
  couponWindow.resizing = false;
});

0
可以通过preventDefault来实现。
document.addEventListener("wheel", (event) =>
{
   if (event.ctrlKey)
      event.preventDefault();
});

可以对某个特定元素进行操作,但其他地方保持不变。
document.getElementById("my_element").addEventListener("wheel", (event) =>
{
   if (event.ctrlKey)
      event.preventDefault();
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接