Java8环境下调整IE11 kiosk模式窗口大小并隐藏地址栏工具栏咨询
IE11自定义窗口尺寸+禁止用户编辑URL的实现方案
核心问题说明
你当前的实现逻辑存在两个本质错误:
- IE11的
-kkiosk模式原生设计就是强制全屏运行,系统级屏蔽了所有窗口大小调整的API,不管是浏览器内JS还是外部调用都无法修改kiosk模式下的窗口尺寸 - 你使用Java内置的Nashorn JS引擎执行的JS代码,和IE浏览器的运行上下文完全隔离,执行的JS根本操作不到IE的窗口对象,所以resize逻辑完全无效;直接把javascript伪协议拼在IE启动参数中的写法不符合IE的参数规范,所以会触发文件下载弹窗。
无需JS的实现方案(推荐)
完全不需要编写JS即可实现需求,操作步骤如下:
- 放弃使用
-kkiosk启动参数,改用IE普通启动模式,通过Windows组策略禁止显示地址栏、导航栏等控件,防止用户修改URL:- 按下
Win+R输入gpedit.msc打开本地组策略编辑器 - 定位到路径:
用户配置 > 管理模板 > Windows组件 > Internet Explorer > 工具栏 - 依次启用以下策略:
- 隐藏地址栏
- 隐藏菜单栏
- 隐藏命令栏
- 禁止用户调整工具栏布局
- 再定位到路径:
用户配置 > 管理模板 > Windows组件 > Internet Explorer > 浏览器菜单 - 启用「禁用"地址栏"选项」,防止用户手动调出地址栏
- 按下
- 修改Java启动IE的代码,删除无效的resizeBrowser调用即可(顺带修正原代码中异常提示的笔误):
private static String newUrl = replaceUserID(url); public static void main(String[] args) { try{ Process p = new ProcessBuilder("cmd.exe", "/c", "start iexplore \"" + newUrl +"\"").inheritIO().start(); try{ p.waitFor(); } catch( InterruptedException ie ){ System.out.println("InterruptedException " + ie.getMessage()); } InputStream err = p.getErrorStream(); int ctr = 0; if ( (ctr = err.available()) > 0 ){ byte[] buf = new byte[ctr]; System.out.println("Process failed with error:\n" + new String(buf, 0, ctr)); } } catch(IOException ioe) { System.out.println("IOException " + ioe.getMessage()); } }
IE启动后会记住上一次关闭时的窗口尺寸,你只需要首次启动后手动调整到需要的大小,后续打开都会保持该尺寸。
无组策略权限的替代方案
如果没有修改本地组策略的权限,可以通过Java调用Windows user32.dll原生API实现:
- 启动IE普通模式后,调用
FindWindow接口获取IE的窗口句柄 - 调用
SetWindowPos接口直接设置窗口的位置和大小 - 调用
SetWindowLongPtr接口隐藏IE的标题栏、地址栏等控件
该方案同样不需要使用任何JS逻辑。
内容的提问来源于stack exchange,提问作者Anon1234
相关产品推荐
相关产品推荐

