我正在尝试使用JavaScript FullScreen API,从这里开始使用当前非标准实现的变通方法:
https://developer.mozilla.org/en/DOM/Using_full-screen_mode#AutoCompatibilityTable
可悲的是,它的行为非常不稳定。我只关心Chrome(使用V17),但由于我遇到了问题,我在Firefox 10中做了一些测试进行比较,结果类似。
下面的代码试图将浏览器设置为全屏,有时可以,有时不能。它总是调用警报来指示它正在请求全屏。下面是我发现的:
- 它通常设置为全屏。它可以达到这样一种状态,即它停止工作,但警报仍然发生,即它仍然要求全屏,但它不工作。
- 如果从按键处理程序(document. onkeypress)调用它,它可以工作,但在页面加载(window. onload)时调用它就不行了。
我的代码如下:
function DoFullScreen() {
var isInFullScreen = (document.fullScreenElement && document.fullScreenElement !== null) || // alternative standard method
(document.mozFullScreen || document.webkitIsFullScreen);
var docElm = document.documentElement;
if (!isInFullScreen) {
if (docElm.requestFullscreen) {
docElm.requestFullscreen();
}
else if (docElm.mozRequestFullScreen) {
docElm.mozRequestFullScreen();
alert("Mozilla entering fullscreen!");
}
else if (docElm.webkitRequestFullScreen) {
docElm.webkitRequestFullScreen();
alert("Webkit entering fullscreen!");
}
}
}
5条答案
按热度按时间iklwldmw1#
由于安全原因(至少在Chrome中),无法自动调用
requestFullscreen()
。因此只能通过用户操作调用,例如:如果文档包含在框架中:
allowfullscreen
需要存在于<iframe>
元素上 *“...若要防止嵌入内容全屏显示,只有通过HTML
iframe
元素的allowfullscreen
属性特别允许的嵌入内容才能全屏显示。这将防止不受信任的内容全屏显示...”阅读更多:W3 Spec on Fullscreen
@abergmeier还提到,在Firefox上,全屏请求必须在用户生成的事件触发后1秒内执行。
pvcm50d12#
我知道这是一个很老的问题,但它仍然是谷歌搜索FireFox的错误消息时,从代码调用
mozRequestFullScreen()
,没有任何用户交互触发的顶部结果。全屏请求被拒绝,因为未从短时间运行的用户生成的事件处理程序内部调用Element.mozRequestFullScreen()。
如前所述,这是一项安全设置,因此在正常浏览器环境(最终用户计算机)中是正确的行为。
但是我正在写一个基于HTML5的数字标牌应用程序,它在一个受控的环境下运行,没有任何用户交互。它是至关重要的,我的应用程序能够切换到全屏自动。
幸运的是FireFox提供了一个可能性,以消除这一限制的浏览器,这是相当困难的找到。我会写在这里作为未来的参考,为大家找到这个网页通过谷歌搜索,因为我没有
在
about:config
页面上搜索以下键并将其设置为false对于我的数字标牌应用程序,我还删除了进入fullscreen时浏览器显示的提示:
希望这可能会保存一些人的时间,我浪费了找到这些设置。
vfhzx4xs3#
您的函数没有问题,在Firefox中,如果您直接调用该函数,它会阻止全屏,您知道,全屏请求被拒绝是因为docElm.mozRequestFullScreen();不是从一个短时间运行的用户生成的事件处理程序中调用的。所以,你必须在事件上调用这个函数,比如在Firefox中调用onClick。
tp5buhyn4#
requestFullscreen()
的另一个意外问题是父帧需要具有allowfullscreen
属性,否则Firefox会输出以下错误:全屏请求被拒绝,因为文档的至少一个包含元素不是iframe或没有“allowfullscreen”属性。
除了iframe之外,这也可能是由于您的页面位于
frameset
框架中。由于frameset
已被弃用,因此不支持HTML5allowfullscreen
属性,requestFullscreen()
调用失败。Firefox文档在MDN上明确说明了这一点,但我认为值得在这里重申,因为开发人员可能没有先阅读文档...... ahem
只有顶级文档或中具有allowfullscreen属性的元素才能全屏显示。这意味着
frame
或object
中的元素不能。lh80um4z5#
我知道这是一个老职位,但如果其他人发现这一点,我想添加一些建议和样本代码。
为了帮助避免此错误...
无法对“元素”执行“requestFullscreen”:API只能由用户手势启动。
不要测试 requestFullscreen() 是否存在,这是一个方法,而是测试像 document.fullscreenEnabled 这样的属性是否存在。
还要考虑以下几点...