我正在尝试使用JavaScript FullScreen API,从此处使用当前非标准实现的变通方法:
https://developer.mozilla.org/en/DOM/Using_full-screen_mode#AutoCompatibilityTable
可悲的是,它表现得非常不稳定。我只关心Chrome(使用v17),但由于我遇到问题,我在Firefox 10中进行了一些测试以进行比较,结果相似。下面的代码尝试将浏览器设置为全屏,有时它可以正常工作,有时则不然。它始终调用警报以指示它正在请求全屏。这是我发现的:
我的代码如下:
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!");
}
}
}
答案 0 :(得分:74)
requestFullscreen()
。因此,它只能通过用户操作调用,例如:
如果您的文档包含在框架中:
allowfullscreen
需要出现在<iframe>
元素* * W3规格:
“...为了防止嵌入式内容全屏显示,只有通过HTMLallowfullscreen
元素的iframe
属性明确允许的嵌入内容才能全屏显示。这可以防止不受信任的内容全屏显示... “
@abergmeier也提到,在用户生成的事件被触发后,Firefox上的全屏请求must be executed within 1 second。
答案 1 :(得分:20)
我知道这是一个相当古老的问题,但在从任何用户互动未触发的代码调用mozRequestFullScreen()
时搜索FireFox的错误消息时,Google仍然是最佳结果
请求全屏被拒绝,因为 没有从short内部调用Element.mozRequestFullScreen() 运行用户生成的事件处理程序。
如前所述,这是一个安全设置,因此在普通浏览器环境(最终用户机器)中是正确的行为。
但我正在编写一个基于HTML5的数字标牌应用程序,该应用程序在受控环境下运行,无需任何用户交互。我的应用程序能够自动切换到全屏幕至关重要。
幸运的是,FireFox提供了在浏览器上删除此限制的可能性,这很难找到。我将把它写在这里,作为每个人通过Google搜索找到此页面的未来参考
在about:config
页面上搜索以下密钥并将其设置为 false
full-screen-api.allow-trusted-requests-only
对于我的数字标牌应用程序,我还删除了浏览器在输入fullscren时显示的提示:
full-screen-api.approval-required
希望这可以节省一些人浪费时间来找到这些设置。
答案 2 :(得分:6)
您的功能没有任何问题。在Firefox中,如果直接调用该函数,它将阻止全屏显示。如您所知,请求全屏被拒绝,因为docElm.mozRequestFullScreen();没有从短时间运行的用户生成的事件处理程序中调用。因此,您必须在事件中调用该函数,例如Firefox中的onClick。
<a href="#" onClick="DoFullScreen()">Full Screen Mode</a>
答案 3 :(得分:3)
requestFullscreen()
的另一个意外问题是父框架需要具有allowfullscreen
属性,否则Firefox会输出以下错误:
全屏请求被拒绝,因为至少有一个文档包含的元素不是iframe或者没有“allowfullscreen”属性。
除了iframe,这可能是由于您的网页位于frameset
框架内造成的。由于不推荐使用frameset
,因此不支持HTML5 allowfullscreen
属性,requestFullscreen()
调用失败。
Firefox文档在MDN上明确说明了这一点,但我认为对于那些可能不会首先阅读文档的开发人员而言,这里重申一下...... ahem
只能使用顶级文档或带有allowfullscreen属性的元素全屏显示。这意味着
frame
或object
中的元素可以&#t; t。