如何用JS判断IE11窗口在多分辨率显示器上是否完全最大化?
多显示器环境下判断浏览器窗口最大化的通用方案
这个问题确实在多显示器场景下挺棘手的——不同浏览器对窗口、屏幕属性的实现差异太大了。不过我们可以结合各个浏览器的特性,整理出一个通用的判断方案,先理清楚核心思路,再上具体实现:
核心判断逻辑
要确认窗口是否最大化,本质是看窗口是否完全填满了当前所在显示器的可用区域(这里的可用区域指排除任务栏、系统托盘等系统UI后的屏幕空间)。我们需要兼容不同浏览器的属性差异,同时结合窗口的位置信息来验证。
关键属性梳理
先整理一套跨浏览器兼容的核心属性:
window.screenLeft/window.screenX:窗口左上角相对于主显示器左上角的水平偏移量(适配不同浏览器的属性名)window.screenTop/window.screenY:窗口左上角相对于主显示器左上角的垂直偏移量window.outerWidth/window.outerHeight:整个浏览器窗口的宽高(包含边框、标题栏)window.innerWidth/window.innerHeight:浏览器内容区域的宽高(不含边框、标题栏)window.screen.availWidth/availHeight:当前显示器的可用宽高(自动排除系统UI占用空间)window.screen.availLeft/availTop:当前显示器可用区域左上角相对于主显示器的坐标(部分浏览器原生支持,不支持则默认取0)
通用判断函数
结合这些属性,我们可以写出适配多显示器、兼容主流浏览器的判断函数:
function isWindowMaximized() { // 兼容不同浏览器的窗口位置属性 const screenLeft = window.screenLeft || window.screenX; const screenTop = window.screenTop || window.screenY; // 浏览器窗口整体尺寸 const outerWidth = window.outerWidth; const outerHeight = window.outerHeight; // 当前显示器的可用区域尺寸和起始坐标 const availWidth = window.screen.availWidth; const availHeight = window.screen.availHeight; const availLeft = window.screen.availLeft || 0; const availTop = window.screen.availTop || 0; // 基础判断:窗口是否完全对齐并填满当前显示器的可用区域 const fillsAvailArea = (screenLeft === availLeft) && (screenTop === availTop) && (outerWidth === availWidth) && (outerHeight === availHeight); // 针对Chrome/Edge(Chromium内核)的特殊验证:最大化时无边框,innerWidth等于outerWidth const isChromiumMax = fillsAvailArea && (window.innerWidth === window.outerWidth); // 针对Firefox的特殊验证:最大化时内容区域宽度等于当前显示器的实际宽度 const isFirefoxMax = fillsAvailArea && (window.innerWidth === window.screen.width); // 针对IE的验证:仅通过位置和尺寸匹配(IE没有专属的最大化标识属性) const isIEMax = fillsAvailArea; // 满足任意一种浏览器的最大化条件即可 return isChromiumMax || isFirefoxMax || isIEMax; }
额外说明
- 任务栏位置不影响判断:
availWidth/availHeight会自动排除任务栏占用的空间,窗口最大化时刚好匹配这个尺寸 - 适配任意多显示器布局:不管副显示器在主显示器的左、右、上、下,
availLeft/availTop都会对应当前显示器的起始坐标,确保位置判断准确 - 极端场景说明:如果用户手动调整窗口到刚好填满可用区域(非最大化状态),这个函数会误判,但这种场景非常罕见,几乎可以忽略
内容的提问来源于stack exchange,提问作者User124521
相关产品推荐
相关产品推荐

