怎么隐藏网页窗口
用 Chrome 打开一个网页,隐藏按 F12,网页切到 Console,窗口输入这行代码: 回车。一个光秃秃的网页小窗口弹出来,没有地址栏,窗口没有标签页,隐藏没有菜单。网页这就是窗口最原始的"隐藏窗口"——不是让窗口消失,而是隐藏把它的"身份特征"抹掉。 很多人不知道,网页 但有个坑:现代浏览器对 另一个限制是, 如果你不是要弹新窗口,而是想在当前页面里"藏"一个网页, 但注意, 还有一种更隐蔽的:把 iframe 的透明度设为 0,尺寸设为 1x1 像素,定位在页面角落。用户完全看不到,但它确实在渲染。不过这种做法容易被广告拦截器盯上,因为太像追踪像素了。 如果你要藏的是整个浏览器窗口本身,那就不是网页层面能解决的了。Windows 上可以用 Chrome 扩展有个 Firefox 有个 去年帮朋友做一个内部工具,需要在用户点击按钮后,后台静默打开一个数据上报页面,用户完全无感知。我的做法是:创建一个 整个过程用户看不到任何窗口变化,也没有弹窗拦截的问题。唯一要注意的是,某些浏览器对 1x1 像素的 iframe 会降低渲染优先级,加载可能变慢。后来我改成 10x10 像素,问题就没了。 还有,隐藏窗口不等于安全。你藏起来的页面依然在运行 JavaScript,依然能访问 window.open('https://example.com',隐藏 '_blank', 'width=400,height=300,menubar=no,toolbar=no,location=no')window.open 能控制什么
window.open() 的窗口第三个参数是一串用逗号分隔的特性字符串。width 和 height 决定尺寸,隐藏left 和 top 决定位置。网页menubar、窗口toolbar、location、status、scrollbars 全部设为 no,浏览器就会把这些 UI 元素藏起来。window.open 的限制越来越严。Chrome 要求这个调用必须发生在用户交互(比如点击事件)的回调里,否则会被弹窗拦截器干掉。你在控制台直接敲能生效,是因为 DevTools 给了特权。location=no 在部分浏览器版本里已经失效了。Chrome 从某个版本开始,即使你设了 no,地址栏依然会显示。这是安全策略,防止钓鱼网站伪装成系统窗口。iframe 是另一种思路
iframe 更直接。给它设 width="0" height="0" frameborder="0",再加个 style="display:none",它就彻底从视觉上消失了。display:none 的 iframe 在很多浏览器里不会加载内容。想让它加载但不可见,用 position:absolute; left:-9999px; top:-9999px; 更可靠。我试过用这个方式在后台加载一个第三方登录页面,等用户触发操作时再把它挪回可视区域,体验很顺。浏览器扩展的玩法
ShowWindow(hWnd, SW_HIDE) 这个 Win32 API,但需要从浏览器扩展调用本地程序。chrome.windows API,可以创建窗口时设 state: "minimized" 或者 focused: false。但真正意义上的"隐藏"——任务栏里都看不见——扩展做不到。那是操作系统级别的操作。browser.windows.create,参数类似。但同样,只能最小化或者失焦,不能从任务栏消失。一个实际案例
position:fixed; width:1px; height:1px; opacity:0; pointer-events:none; 的 iframe,指向上报地址。页面加载完成后,iframe 里的脚本通过 postMessage 把结果传回父页面,然后父页面移除这个 iframe。别踩的坑
window.open 返回的窗口对象,如果被浏览器拦截,返回值是 null。一定要做判空处理,不然下一行 win.document.write() 直接报错。localStorage、发起网络请求。如果藏的是第三方页面,它甚至可能通过 window.opener 反过来操作你的主页面。该设 noopener 就设,别偷懒。