最近在做一个类似收银核销管理系统的项目,本来框架没什么问题,但是boss突然提出核销页面在操作时最好iframe窗口进入全屏模式。我第一思路是模拟发送F11请求,但是F11是整个页面进入全屏模式,并不是iframe窗口,故查阅网上资料发现有进入全屏模式的API——Fullscreen。调用requestFullscreen()可以进入全屏模式,和exitFullscreen()退出全屏模式。故代码如下:
Html代码:
<input id="enterFullScreen" type="button" value="进入全屏" οnclick="toFull()" /> <input id="exitFullScreen" type="button" value="退出全屏" οnclick="exitFull()" />
Js代码:
<script> function toFull() { var docElm = document.documentElement; //W3C if (docElm.requestFullscreen) { docElm.requestFullscreen(); } //FireFox else if (docElm.mozRequestFullScreen) { docElm.mozRequestFullScreen(); } //Chrome else if (docElm.webkitRequestFullScreen) { docElm.webkitRequestFullScreen(); } //IE else if (elem.msRequestFullscreen) { elem.msRequestFullscreen(); } } function exitFull() { if (document.exitFullscreen) { document.exitFullscreen(); } else if (document.mozCancelFullScreen) { document.mozCancelFullScreen(); } else if (document.webkitCancelFullScreen) { document.webkitCancelFullScreen(); } else if (document.msExitFullscreen) { document.msExitFullscreen(); } } </script>
为解决浏览器的兼容性,故将各浏览器函数进行封装。
但是发现不起作用,查看浏览器控制台发现报警告:“请求全屏已拒绝,至少一个文档包含的元素不是一个 iframe,或没有"allowfullscreen"属性。”
原来iframe标签有个allowfullscreen属性来控制是否允许全屏,因此对iframe标签添加了allowfullscreen=true 效果如下:
但是突然发现,之前使用layer.confirm在这里因为全屏而被覆盖了而显示不出来,退出全屏后发现询问框出现了。仔细查看原因发现:之前为了方便对layer.confirm进行了封装,为了屏蔽其他iframe窗口(防止点击其他Iframe跳转)因此采用了parent.layer.confirm()。(这是整个页面弹出询问框)。改成layer.confirm()就OK啦。
第一篇blog,写的不好,还望包涵。
API接口文档:https://developer.mozilla.org/zh-CN/docs/Web/API/Element/requestFullScreen