在网页浏览器中使用全屏 API

在创建特殊的最终用户体验方面,一项非常重要的功能是能够以全屏方式显示内容,有效地隐藏所有其他内容等。

还记得网站曾经教你如何配置你的网页浏览器隐藏工具栏等,以获得更好的用户体验吗?或者可能只是我… :-)

无论如何,一段时间前,我们在网页浏览器中获得了全屏支持,用户可以选择以全屏方式查看当前网站。这很好,但作为扩展,作为网页开发者,我们希望能够触发它。无论是针对整个网站还是特定元素。

现在我们可以了!

请求全屏

我们现在可以使用名为 requestFullScreen 的方法,目前已在 Firefox、Google Chrome、Safari 和 Internet Explorer 中实现。因此,为了使其目前能够工作,我们需要以下代码


请注意,W3C 规范中的全屏标准 在所有方法中都使用小写字母“s”,而 Firefox、Google Chrome 和 Safari 使用大写字母。

上面的代码只是获取对 documentElement 的引用并请求将其以全屏方式显示。当然,您也可以只使某个特定元素全屏,例如视频,对您希望使用的元素调用相同的方法。

取消全屏

如果要取消全屏状态,需要在文档元素上调用它


请注意,命名方面存在差异,在某些实现中是关于退出状态,在其他实现中是取消状态。

检测全屏状态更改

例如,用户可以退出全屏,这可能对您来说很重要。为此,我们有一个 fullscreenchange 事件,您可以将其应用于请求全屏的元素,也可以应用于文档。然后我们只需检测全屏状态并相应地采取行动,如下所示


document.addEventListener("mozfullscreenchange", function () {
fullscreenState.innerHTML = (document.mozFullScreen)? "" : "not ";
}, false);

document.addEventListener("webkitfullscreenchange", function () {
fullscreenState.innerHTML = (document.webkitIsFullScreen)? "" : "not ";
}, false);
document.addEventListener("msfullscreenchange", function () {
fullscreenState.innerHTML = (document.msFullscreenElement)? "" : "not ";
}, false);

全屏样式

在 CSS 中,我们获得了一些用于设置全屏元素样式的伪类。最可靠的是用于全屏,并在文档/元素处于全屏模式时自动触发


html:-webkit-full-screen {
background: red;
}

html:-ms-fullscreen {
background: red;
width: 100%; /* IE 中需要居中内容 */
}

html:fullscreen {
background: red;
}

请注意,W3C 方法在“full”和“screen”之间不使用连字符。

还应补充一点,Firefox 是唯一一个将宽度和高度设置为 100% 的网页浏览器,因为我们认为这是期望的行为。当然,可以使用上述 CSS 覆盖此行为。

带键盘输入的全屏

出于安全原因,大多数键盘输入在全屏模式下都被阻止了。但是,在 Google Chrome 中,您可以通过使用标志调用方法来请求键盘支持

docElm.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT);

这在 Safari 中不起作用,并且不会调用该方法。

对于 Firefox,我们正在讨论和研究如何添加键盘输入支持而不会危及最终用户安全性的各种方法。一个尚未实施的建议是 requestFullscreenWithKeys 方法,该方法反过来会触发对用户的某些通知。

网页浏览器支持

此功能目前在 Firefox 测试版 中可用,但预计将在明天的 Firefox 10 正式版中发布!它还从版本 15 开始在 Google Chrome 中可用,从 5.1 开始在 Safari 中可用,从版本 11 开始在 Internet Explorer 中可用。

体验全屏!

我有一个 全屏 API 演示 供您体验,所有代码都可在 GitHub 上的全屏存储库 中找到。

关于 Robert Nyman [荣誉编辑]

Mozilla Hacks 的技术布道师和编辑。发表关于 HTML5、JavaScript 和开放网络的演讲和博客。Robert 是 HTML5 和开放网络的坚定支持者,自 1999 年以来一直从事网页前端开发工作 - 在瑞典和纽约市。他还定期在 http://robertnyman.com 上发布博客,并且喜欢旅行和结识新朋友。

更多 Robert Nyman [荣誉编辑] 的文章…


92 条评论

  1. Rodrigo Ayala

    太棒了!我以前不知道这个功能,这是一个很棒的功能,可以用来显示全屏视频或使用整个屏幕玩酷炫游戏。

    注意:演示对我来说不起作用,但我没有阅读您说从 Firefox 10 开始支持的那部分(而我使用的是 FF9)xD…

    Robert,非常棒的帖子!非常感谢 :)

    2012 年 1 月 30 日 10:57

    1. Robert Nyman

      确实,它开启了许多有趣的选择!谢谢!
      现在去安装一个你可以尝试这些功能的网页浏览器版本吧。 :-)

      2012 年 1 月 30 日 10:59

  2. James

    两个问题

    1) 浏览器是否将通过网页触发的全屏与用户只是转到工具栏“查看”>“全屏”的方式进行任何不同的处理?

    2) 我不确定我是否理解全屏模式下限制击键的原因。如果您将包含文本区域的网页全屏显示,是否意味着我无法在其中键入?根据 MDN 全屏文档 (https://mdn.org.cn/en/DOM/Using_full-screen_mode),“在全屏模式下输入任何字母数字键盘输入都会导致出现警告消息”。我刚刚将此网页全屏显示(“查看”>“全屏”)并正在键入此消息,但没有看到任何“警告消息”。我应该看到吗?也许这个问题的答案与我的第一个问题有关。

    谢谢!

    2012 年 1 月 30 日 11:23

    1. Robert Nyman

      您好,

      1. 就像 Chris Pearce 在下面提到的,它对键盘输入的处理方式不同,如果您在 Firefox 中选择“查看”>“全屏”,您会看到地址栏位于顶部,自动隐藏,而在通过代码调用时则不会。此外,当通过全屏 API 使用时,用户会收到通知,告知他们已进入全屏状态,并且可以使用 Esc 退出。

      2. 目前,提到的警告是指通知您处于全屏模式,需要按 Esc 退出。

      2012 年 1 月 31 日 02:41

  3. marcusklaas

    酷!它确实在 Chrome 中运行良好。问题:这是否也适用于 iPad 等带有 iOS 5 的设备?

    2012 年 1 月 30 日 11:39

    1. marcusklaas

      此外,是否需要在事件监听器中执行此全屏代码?当我在没有用户生成事件的情况下在外部执行它时,似乎不起作用..

      2012 年 1 月 30 日 13:44

    2. Robert Nyman

      不,它目前不适用于 iOS 5。也许在下一次更新中?

      2012 年 1 月 31 日 02:42

  4. André Luís

    Rob,精彩的帖子!并且很高兴在这里,在 Mozilla 的网站上关注您的文章。

    继续努力!谢谢。支持已经发展得相当不错了……因此在接下来的几个月里,这应该会变得更加普遍。

    2012 年 1 月 30 日 15:00

    1. Robert Nyman

      谢谢! :-)
      很高兴在这里见到你,并享受这个 API!

      2012 年 1 月 31 日 02:42

  5. Chris Pearce

    @James:“查看”>“全屏”模式和 HTML 全屏模式对键盘输入的处理方式不同,以防止网络钓鱼攻击;如果 evilsite.com 进入全屏并呈现类似于 Firefox UI 的内容,其中包含一个 PayPal 登录屏幕,它可能会欺骗用户输入他们的用户名和密码。

    @marcusklaas:仅在用户生成的事件处理程序(鼠标点击和按键处理程序)中授予全屏请求。这样,用户可以控制网站何时进入全屏状态,这也有助于防止网络钓鱼攻击。

    2012 年 1 月 30 日 18:17

  6. Oliver Caldwell

    为 API 写了一个小的包装类。不想每次都写那些 if 语句。 https://gist.github.com/1710727

    2012 年 1 月 31 日 08:19

    1. Robert Nyman

      不错,谢谢!

      2012 年 1 月 31 日 09:53

  7. John Dyer

    一些人询问了 iOS,所以答案如下。在带有 [视频] 元素的 iPad 上,您可以调用 myvideo.webkitEnterFullScreen() 使视频退出浏览器并在 iOS 的原生播放器中播放。注意它是“enter”,而不是“request”。

    Robert,您能否也介绍一下 Firefox 中 fullscreenEnabled 的详细信息以及它在 Firefox 9 到 10 之间的区别?

    2012 年 1 月 31 日 15:15

    1. Robert Nyman

      这确实是 iOS 的一个选项,是的,但并不像上面提到的 API/方法那样全面。

      对于 fullscreenEnabled,自从它在 Firefox 10 中首次正确启动以来,我并没有意识到有任何差异。有关更多信息,我建议您参考 关于全屏的 MDN 文章Chris Pearce 关于全屏的文章

      2012 年 2 月 1 日 06:28

  8. Joe Shelby

    我不确定“全屏”在 iOS 设备中是否真的有意义(好吧,对于当前的产品来说 - 当 Mac 直接运行 iOS 时,可能会改变一些事情)。iPad/iPod touch/iPhone(以及 Android 设备)中的浏览器本质上始终处于全屏模式。您看不到边框。您看不到窗口,除非通过特殊的 UI 元素来模拟它们(例如 Firefox for Android 的屏幕外左侧边栏,其中所有内容都是“选项卡”)。您最多可以从中获得的是隐藏地址栏的显式请求,该地址栏通常在窗口小于屏幕时显示。

    2012 年 2 月 2 日 20:22

    1. Robert Nyman

      是的,它的好处远不如桌面版,但不可否认,在某些情况下它仍然可以改善用户体验。

      2012 年 2 月 3 日 01:20

  9. kris

    嘿,Robert,很棒的帖子。感谢分享!

    我最近正在处理同样的问题。有谁知道,我们可爱的 Internet Explorer 是否会有类似的功能?

    即使您按下“F11”,Internet Explorer 也会像其他浏览器一样切换到全屏模式。不幸的是,由于安全原因,您无法通过 JavaScript 触发 F11 按键事件。

    2012 年 2 月 9 日 04:53

    1. John Dyer

      我与 IE 团队进行了交谈,他们只会说除非功能完成,否则不会发表评论。同时,他们希望大家知道 Windows 8 在 Metro 模式下默认处于全屏状态。

      2012 年 2 月 9 日 06:58

    2. Robert Nyman

      谢谢!我听说过同样的消息:目前尚不清楚 Microsoft 是否会在 IE10 中实现它。

      2012 年 2 月 9 日 12:16

  10. 40kg

    当我将 Flash 嵌入 HTML 中时,它不起作用。
    您能解释一下原因吗?
    非常感谢!!

    2012 年 2 月 19 日 23:16

    1. Robert Nyman

      它以什么方式不起作用?没有任何反应?错误消息?
      这种行为在支持全屏 API 的所有网页浏览器中是否一致?

      2012 年 2 月 20 日 01:43

  11. 40kg

    当我像上面那样将 Flash 游戏嵌入 HTML 中时,全屏 API 无法正常工作。如果我设置 wmode=”opaque”,API 会起作用,但每次浏览器切换到全屏时,Flash 游戏都会意外重启…
    您能帮我解决如何在不重启 Flash 游戏的情况下使浏览器全屏的问题吗?谢谢!O(∩_∩)O

    2012 年 2 月 20 日 18:16

    1. Robert Nyman

      我不确定两者之间的联系是什么。但是,如果此问题仍然存在,请 提交错误报告

      2012 年 2 月 21 日 00:20

    2. Toby

      啊哈,这是 Firefox 的一个错误,它会完全刷新(重启)任何包含在更改其显示类型的元素中的插件: https://bugzilla.mozilla.org/show_bug.cgi?id=90268

      添加关于 Mozilla 没有早点修复此问题的通用评论 - 此错误一直是我对 FF 的热爱中的一个障碍。

      如果你想做全屏 Flash,我个人建议使用 Flash 本身的功能来实现,这是 Flash 为数不多的优势之一!

      2012年3月8日 10:09

      1. Chris Pearce

        @Toby:这是你的幸运日!错误 90268 已经在即将发布的 Firefox 13 中修复。修复过程耗时这么久,部分原因在于修复非常棘手,并且在与各个供应商的插件配合使用时遇到了很多问题。

        2012年3月8日 14:52

        1. Robert Nyman

          很高兴听到这个消息!

          2012年3月9日 00:51

        2. Toby

          这是个好消息!这是一个非常棘手的错误,但仍然很隐蔽,而且不幸的是会导致程序停止。

          期待能够制作出酷炫的网站,并在屏幕上将插件元素作为另一个元素使用 :)

          另外,我完全忘记感谢 Rob 为全屏撰写的精彩文章了——真的非常喜欢,希望将来能够用到它!

          2012年3月12日 07:10

          1. Robert Nyman

            谢谢,很高兴听到你喜欢它!

            2012年3月12日 13:40

  12. cpearce

    @40kg:在 Firefox 10 中,除了 MacOSX 之外,我们在所有平台上都拒绝了在页面中存在窗口化插件时对全屏模式的请求。这是出于安全原因考虑。在 Firefox 11 中,当窗口化插件获得焦点时,我们切换到退出全屏。因此,HTML 全屏 + Flash 永远无法很好地协同工作。Flash 已经有全屏模式,你可以使用它吗?

    2012年2月21日 13:58

    1. Robert Nyman

      有趣!这是否仅适用于将 Flash 设置为全屏,还是适用于包含 Flash 的页面中的任何元素?

      2012年2月22日 01:10

    2. 40kg

      当我使用 Flash 的全屏模式时,键盘事件出于安全原因被禁用。而我的 Flash 游戏需要键盘来玩,所以我希望浏览器能够实现全屏。有没有办法在全屏模式下启用键盘?谢谢(⊙_⊙)。

      2012年2月22日 02:24

      1. Robert Nyman

        这在博客文章中“带键盘输入的全屏”标题下有介绍。

        2012年2月22日 02:26

  13. 前排票

    非常好的信息,这对我们来说非常有用,当我们想要时,可以让我们的票务列表对用户全屏显示。

    2012年2月28日 08:41

    1. Robert Nyman

      很高兴听到这个消息!

      2012年2月28日 08:55

  14. Gustav Evertsson

    按下 F11 似乎不会触发 fullscreenchange 事件,即使结果相同,窗口处于全屏状态。F11 全屏是否有其他事件?我想有一个“以全屏查看”按钮,我希望在全屏模式下隐藏它,包括 F11 触发的模式和 javascript requestFullscreen() 触发的模式。

    2012年3月5日 23:47

    1. Robert Nyman

      不,结果并不相同。根据 Web 浏览器的不同,工具栏、警告以及退出全屏模式的方式也各不相同。

      此事件仅涵盖以编程方式触发全屏的情况。

      2012年3月6日 01:01

      1. Gustav Evertsson

        好的,我可以接受它们是两种具有独立实现的不同模式,即使我认为它们是重叠的。
        您知道是否可以检测 F11 全屏?如果无法获得单独的事件,是否可以通过检测窗口大小的变化并检查窗口和屏幕大小是否相同来实现?

        2012年3月6日 05:51

        1. Robert Nyman

          是的,比较 screen.width 和 window.innerWidth 应该可以,但你需要不断地轮询它。

          2012年3月6日 05:53

  15. Neel Mehta

    这太棒了,Robert!不过我注意到,当应用全屏并且我的 JS 更改页面的 background-image 时,背景图像似乎没有应用,我得到的只是一个黑色背景。您知道为什么会发生这种情况吗?

    2012年3月11日 17:52

    1. Chris Pearce

      Firefox 会将 background:black 规则应用于全屏元素。您应该能够覆盖它,您可以提供一个页面链接,其中 background-image 在全屏模式下不起作用吗?

      2012年3月11日 18:02

    2. Robert Nyman

      谢谢,很高兴你喜欢它!就像 Chris 所说,如果您有出现问题的 URL,请在这里分享。

      2012年3月12日 13:40

  16. Sindre Sorhus

    我为全屏 API 创建了一个简单的包装器,以简化前缀混乱并修复不同实现中的一些不一致问题。

    https://github.com/sindresorhus/screenfull.js

    2012年4月22日 07:16

    1. Robert Nyman

      谢谢!

      2012年4月24日 15:03

  17. Nikhil

    我能否默认以全屏模式打开一个网站?我尝试在 DOM 就绪时调用 API,但它没有任何作用。但是,如果将相同的函数注册为元素上的事件侦听器,则可以完美运行。API 是否只能与事件一起使用?

    2012年4月24日 00:52

    1. Robert Nyman

      不,出于安全原因,它必须由用户操作(例如单击)来启动。

      2012年4月24日 15:05

      1. Nikhil

        啊哈……我猜到了……谢谢!

        2012年4月24日 22:16

  18. Sazzad

    当我使用 jQuery(document).ready(function($) {}); 中的代码时,它不起作用。

    jQuery(document).ready(function($) {
    var docElm = document.documentElement;
    if (docElm.requestFullscreen) {
    alert(“requestFullscreen”);
    docElm.requestFullscreen();
    }
    else if (docElm.mozRequestFullScreen) {
    alert(“mozRequestFullScreen”);
    docElm.mozRequestFullScreen();
    }
    else if (docElm.webkitRequestFullScreen) {
    alert(“webkitRequestFullScreen”);
    docElm.webkitRequestFullScreen();
    }
    });

    谁能帮我一下吗?

    2012年4月27日 06:51

    1. Robert Nyman

      不确定你为什么使用两个 document.ready 函数,除非评论中是打字错误。如果页面中是否可用 documentElement 也可能取决于你的文档类型。

      首先使用 全屏 API 演示 中的代码,然后在此基础上进行修改。

      2012年4月29日 08:38

      1. Sazzad

        可能在 document onload 时它不起作用。
        可能它仅在用户交互时才有效。
        可能它仅在点击时才有效。

        2012年4月29日 22:50

        1. Robert Nyman

          啊,没错。是的,它必须由用户交互来启动。

          2012年5月8日 05:50

  19. sree

    显示全屏后,它首先显示“按 ESC 退出”……
    这段文字是从哪里显示的?

    以及

    如何避免显示这段文字?

    2012年5月21日 04:13

    1. Jean-Yves Perrier

      你想去掉告诉用户可以通过按 ESC 退出全屏模式的消息吗?

      出于安全原因,这是不可能的:必须通知用户他们现在处于全屏模式。

      2012年5月21日 23:59

  20. Dion

    你好,

    是否可以始终保持全屏状态?

    因为在 Firefox 中,当我点击不同的链接时,它不会保持全屏状态,它会再次变小,我必须再次点击全屏。

    但在 Chrome 中,它会保持全屏状态。

    请帮忙

    (抱歉我的英语,我正在学习)

    2012年5月23日 06:07

    1. Robert Nyman

      这取决于你的意思,但如果你点击一个链接并转到另一个页面/网站,我相信正确的行为是退出全屏。

      2012年5月23日 07:09

  21. Chris Pearce

    @Dion:您可以通过使用“浏览器”全屏模式而不是全屏 API 来获得您想要的行为。在 Windows 或 Linux 上按下 F11 键,或在 Mac 上按下 CMD+Shift+F。

    2012年5月23日 14:24

  22. Kos Korolev

    document.mozCancelFullScreen() 是否也应该像 el.mozRequestFullScreen() 一样由用户启动?
    我想在视频结束时退出全屏模式。我尝试在视频元素的“ended”事件侦听器中调用 document.mozCancelFullScreen(),但它在这里不起作用。它在 Google Chrome 和 Safari 中有效,但在 Firefox 13 和 Firefox Aurora (14a2) 中无效。
    如果 document.mozCancelFullScreen() 只能由用户启动,那么在视频结束时退出全屏模式是否有任何解决方法?

    感谢您的帮助!

    2012年5月29日 04:47

    1. Robert Nyman

      据我所知,取消也必须由用户启动。我已经测试并确认了你的发现,我还尝试了通过 JavaScript 在一个关闭全屏的按钮上触发点击的替代方法,但没有区别。

      因此,就我目前所见,没有其他方法。

      2012年5月29日 05:08

  23. Ryan

    您好,Robert,
    我的页面在浏览器大小发生变化时会重新加载页面。我这样做是为了调整大型图像的大小,使其最适合窗口的大小。

    我实现了全屏代码,其中一半有效。我能够进入全屏状态。但在这一点上,页面会刷新(如预期的那样)。一切看起来都很好。但是,刷新似乎会导致全屏状态丢失。浏览器在刷新后不再认为它处于全屏模式,因此“取消”按钮不起作用。

    有什么想法吗?谢谢!

    2012年6月22日 19:26

    1. Robert Nyman

      就我个人而言,我更愿意检测可用的屏幕宽度和高度以使图像大小适应它——重新加载整个页面对于性能或服务器负载来说似乎不是最佳选择。

      此外,我相信,就像你说的那样,在这种情况下,全屏状态确实可能会丢失。

      2012年6月25日 06:35

  24. jinzhouwang

    现在,在 Firefox 的全屏模式下,滚动条总是隐藏的。我无法处理它。你能帮我一下吗?

    2012年7月22日 07:49

    1. Robert Nyman

      好问题!我正在研究这个问题。

      2012年7月31日 12:52

    2. Robert Nyman

      这是一个 滚动错误,将会得到修复。

      2012年8月3日 01:29

  25. gustavo

    早上好:如何在不使用任何对象事件的情况下将全屏部署到 Web 上?

    我想我应该在标签中……但示例都位于按钮的“click”事件或视频案例上。我希望你能帮我,问候

    这是一个带有按钮元素的函数
    (function () {
    var viewFullScreen = document.getElementById(“view-fullscreen”);
    if (viewFullScreen) {
    viewFullScreen.addEventListener(“click”, function () {
    var docElm = document.documentElement;
    if (docElm.requestFullscreen) {
    docElm.requestFullscreen();
    }
    else if (docElm.mozRequestFullScreen) {
    docElm.mozRequestFullScreen();
    }
    else if (docElm.webkitRequestFullScreen) {
    docElm.webkitRequestFullScreen();
    }
    }, false);
    }
    })();

    2012年7月31日 13:51

  26. gustavo

    这个标签 body onload=””……但没有想法。谢谢

    2012年7月31日 13:53

    1. Robert Nyman

      如上文评论中所述,它必须由用户操作来启动。这意味着你不能在加载或类似情况下触发它。

      2012年7月31日 14:00

  27. JuniorDeveloper

    iPad 浏览器中存在一个小错误,即如果一个 div 覆盖在视频上,则在缩放手势时仍会使视频进入全屏模式。如果我知道如何禁用视频的全屏模式,我就可以修复它。但同时,如果屏幕上存在文本,我应该能够放大文本。

    2012年9月26日 04:07

  28. JuniorDeveloper

    *iPad 浏览器中,如果一个 div 覆盖在……

    2012年9月26日 04:08

    1. JuniorDeveloper

      已修复。禁用视频缩放的一种方法是删除视频标签的“control”属性,“放大”功能会自动禁用。

      请告诉我 WebKit 中是否有方法既显示控件又禁用放大功能。

      2012年9月26日 05:03

      1. Robert Nyman

        很高兴你找到了解决方案。不确定如何禁用放大功能。

        2012年9月26日 05:35

  29. Balsey Dean De Witt, Jr.

    如果您不想在网页上显示滚动条,这在 Firefox 中有效

    我一直非常失望,因为我还没有弄清楚如何使网页保持全屏模式。有一些脚本可以用于一个按钮打开页面,但这需要一个带有按钮的第一页,当你点击按钮时,它将在全屏模式下打开 Firefox。问题是,每当另一个窗口打开时,全屏模式就会消失!

    为什么经过这么多年,这个问题还没有得到解决和修复?我有点记得这方面存在某种安全问题。这都是胡说八道,或者我们所有的程序员都束手无策!

    访问我的网站 http://www.webzmagic.com 感谢

    Dean

    2012年9月29日 19:52

    1. Robert Nyman

      全屏滚动功能即将推出。

      当打开其他窗口时无法保持全屏状态,这是出于安全考虑。

      这样做是为了避免在发生此类操作时出现网络钓鱼(隐藏的 URL 等)的情况。

      2012年10月1日 03:36

  30. Balduin

    如何在全屏模式下获取屏幕高度和宽度?

    2012年10月10日 15:06

    1. Robert Nyman

      通过检查 screen.width 和 screen.height

      2012年10月11日 03:50

  31. Steven

    您好,Robert,

    我目前使用的是 Firefox 16.0.2 版本,我尝试使用 mozCancelFullScreen() 退出全屏模式。我不确定为什么它无法运行。也没有任何错误。但是 mozRequestFullScreen() 可以正常工作。

    请帮忙!谢谢!

    2012年11月8日 17:50

    1. Robert Nyman

      很有趣。我一时半会想不起来为什么会这样。如果问题仍然存在,请提交错误报告。谢谢!

      2012年11月9日 14:51

  32. Chris Pearce

    @Steven: 请注意,只有在位于全屏显示的文档内部时,才能调用 document.mozCancelFullScreen()。例如,如果您在一个包含在另一个全屏文档内的 iframe 中,则 mozCancelFullScreen() 在内部 iframe 中将不会执行任何操作,因为只有外部文档才是真正的全屏状态。也就是说,在外部文档中调用 mozCancelFullScreen 将取消全屏,但在内部文档中调用它则不会。

    还要注意,mozCancelFullScreen() 将全屏状态恢复为之前的全屏元素。因此,如果您多次请求全屏,取消全屏并不一定会完全退出全屏,它可能会回滚到之前的全屏状态。

    2012年11月9日 23:08

    1. Steven

      感谢 Chris 的解释。我明白了。但是,一旦我调用 mozCancelFullScreen(),我就无法再次调用 mozRequestFullScreen()。那么我该如何完全退出全屏?

      2012年11月11日 18:35

  33. Gaurav M

    太棒了.. 一直在寻找这个功能。进入全屏模式并启动另一个全屏视频非常酷!功能

    2012年11月27日 01:31

  34. Riccardo

    嗨,我是 JavaScript 新手,但这个函数正是我需要的!就在昨天,我找到了这些页面,了解如何更改代码以实现我的目标

    https://mdn.org.cn/en-US/docs/DOM/Using_fullscreen_mode
    http://help.dottoro.com/larrqqck.php
    http://help.dottoro.com/ljawbmqm.php

    我希望在我的网站访问时以全屏模式打开,并显示进入全屏模式的通知…我尝试这样更改代码

    用于 HTML

    在 base.js 文件中

    (function () {
    var viewFullScreen = document.getElementById(“view-fullscreen”);
    if (viewFullScreen) {
    viewFullScreen.addEventListener("load", function () {
    var docElm = document.documentElement;
    if (docElm.requestFullscreen) {
    docElm.requestFullscreen();
    }
    else if (docElm.mozRequestFullScreen) {
    docElm.mozRequestFullScreen();
    }
    else if (docElm.webkitRequestFullScreen) {
    docElm.webkitRequestFullScreen();
    }
    }, false);
    }

    希望看到页面打开并显示进入全屏模式的通知,但什么也没有…你能帮我一下吗?非常感谢

    Riccardo

    2012年12月4日 03:18

  35. Riccardo

    抱歉,评论没有包含 HTML 代码…我想说的是,我在想要以全屏模式打开的页面 HTML 标签的开头插入了 id="view-fullscreen"

    2012年12月4日 03:24

    1. Robert Nyman

      您无法使其自动以全屏模式打开,它必须通过用户的操作(例如单击按钮)来触发。

      2012年12月5日 02:51

  36. Riccardo

    感谢您的回复和澄清!

    此致,

    Riccardo

    2012年12月5日 02:59

  37. ganesh

    嗨,在我的情况下,全屏功能完美运行,但退出全屏功能不起作用。

    这是我的全屏代码 -
    function goFullscreen(id) {

    var element = document.getElementById(id);
    if (element.mozRequestFullScreen) {
    element.mozRequestFullScreen();
    } else if (element.webkitRequestFullScreen) {
    element.webkitRequestFullScreen();
    }
    }

    这是我的退出全屏代码
    function noFullscreen(id) {

    var element = document.getElementById(id);
    if (element.exitFullScreen) {
    element.exitFullScreen();
    } else if (element.webkitCancelFullScreen) {
    element.webkitCancelFullScreen();
    }
    }

    这里给出了元素 id,我从 Flash (swf) 中调用此函数..你能告诉我错误在哪里吗?
    提前感谢。

    2012年12月30日 06:20

    1. Robert Nyman

      首先,您应该在文档元素上调用它,而不是 DOM 中的特定元素。其次,您需要包含 Firefox 的代码,而不仅仅是 WebKit。

      if (document.exitFullscreen) {
      document.exitFullscreen();
      }
      else if (document.mozCancelFullScreen) {
      document.mozCancelFullScreen();
      }
      else if (document.webkitCancelFullScreen) {
      document.webkitCancelFullScreen();
      }

      2012年12月30日 13:15

      1. ganesh

        感谢 Robert,它起作用了,实际上您在开头已经提到了同样的事情,但我之前没有理解。但现在它运行完美了..
        好吧,我认为我应该通知您一些事情。在我的 html 文件中,我有两个函数,一个用于全屏,一个用于普通屏幕。如果我调用全屏函数,然后调用普通屏幕函数,它可以工作,但如果我通过按 F11 手动全屏浏览器,然后调用普通屏幕函数,则它不起作用,似乎普通屏幕函数无法检测/理解浏览器是否已处于全屏模式。对我来说这不是什么问题,只是想通知您。

        2012年12月31日 01:46

        1. Robert Nyman

          很高兴它起作用了!
          是的,内置的全屏功能和通过此 API 以编程方式调用的功能并不相同,并且无法交互,这很遗憾。

          2013年1月1日 22:58

  38. Evyatar

    很棒的文章,谢谢!

    不过我有一个问题 - 假设我正在构建一个游戏,其中 Esc 键打开菜单。在全屏模式下,甚至不会触发“keydown”事件。

    这会导致用户使用 Esc 键打开菜单,单击切换全屏,但当他们想要关闭菜单时,这是不可能的,因为 Esc 键被全屏捕获,甚至不会传递到代码中。

    除了更改菜单打开键之外,我还能做些什么吗?

    2013年1月17日 12:20

    1. Robert Nyman

      谢谢!
      我相信 - 在支持 requestFullscreenWithKeys 之前 - 更改菜单的键可能是目前最一致的解决方案,很遗憾。

      2013年1月18日 07:44

      1. Evyatar

        猜到了,这就是我最终所做的 :)

        好吧,我会等到它得到支持。我认为 Esc 键是用户交互中打开菜单的重要键,这是一种标准。再说一次,它是在网络上,所以用户不习惯这样做。

        我将拭目以待,希望 requestFullscreenWithKeys 能实现!

        2013年1月18日 12:47

        1. Robert Nyman

          听起来不错!希望一切顺利,是的,拭目以待!:-)

          2013年1月19日 11:53

  39. Blue Moon

    假设您处于全屏模式,然后使用 META REDIRECT 到另一个页面。第二个页面是否会保持全屏状态?可能不会,我猜…

    如果是这样,这对于数字标牌之类的东西真的很有用。

    2013年4月2日 12:08

    1. Robert Nyman [编辑]

      出于安全考虑,我假设您将通过这种方式退出全屏模式。

      2013年4月3日 08:12

本文的评论已关闭。