我为我的应用程序实现了一个全屏切换功能,它实际上运行良好,在最新的 Chrome、Firefox、IE 和 Opera 上进行了测试。我有一种激活方法和一种停用全屏模式的方法:
public deactivateFullscreen(element) {
if (element.requestFullscreen) {
element.requestFullscreen();
} else if (element.webkitRequestFullscreen) {
document.webkitCancelFullScreen();
} else if (element.mozRequestFullScreen) {
document.mozCancelFullScreen();
}else if(element.msRequestFullscreen){
document.msExitFullscreen();
}
}
public activateFullscreen(element) {
if (element.requestFullScreen) {
element.requestFullScreen();
} else if (element.webkitRequestFullScreen) {
element.webkitRequestFullScreen();
} else if (element.mozRequestFullScreen) {
element.mozRequestFullScreen();
}else if(element.msRequestFullscreen){
element.msRequestFullscreen();
}
}
因此,当从 UI 触发时,它们都可以正常工作。唯一的问题是,一旦我使用该功能进入全屏模式,F11
我就无法使用该deactivateFullscreen
功能退出它。据我对浏览器的理解,一旦我点击F11
. 我尝试使用以下方法对其进行测试:
public isFullscreen(element) {
if(element.webkitIsFullScreen || element.mozFullscreen || element.msFullscreenElement || element.fullscreenElement || element.fullscreen || element.webkitFullscreenElement || element.mozFullScreenElement){
return true;
}
return false;
}
无论我是否处于全屏状态,这总是返回 false。有没有其他方法可以检测我的浏览器当前是否处于全屏模式?还是我在这里缺少一些概念?
我尝试的另一件事是捕获 keydown 事件F11
并阻止其默认操作。
$document.on('keydown',this.fsHandle);
public fsHandle(event:KeyboardEvent){
if(event.keyCode == 122){
event.preventDefault();
this._isFullscreen = !this._isFullscreen;
}
}
使用这种方法,我希望抑制任何F11
事件,以便通过代码手动处理全屏切换。不幸的是,这也不起作用。原因似乎有点奇怪,当我已经处于全屏状态时,根本不会触发 keydown 事件。因此,我可以在全屏模式之外抑制事件,但一旦我进入它就不能。
更新: 一些研究表明,浏览器供应商的安全问题是这种行为的原因。仍然必须有一种方法来处理这种特性。