通过javascript将窗口设置为全屏(真正的全屏;F11功能)

IT技术 javascript jquery fullscreen
2021-01-25 08:36:16

关于这个有几个问题,有人说不可能,有人说在IE浏览器全屏模式下可以吗?我想知道一个通​​用的解决方案和一个答案。

我正在构建一个照片库网页,当全屏查看时,该库确实有所不同(正如标题所说,我说的是真正的全屏,而不是条形和窗口镀铬等),我想放置一个按钮为全屏。(不,我不会在没有用户意图的情况下强行使用 FS,我也讨厌这种“功能”)当通过用户启动的操作(例如按钮单击)启动时,在 Flash 中是可能的,我想知道是否这样东西也可用于 Javascript。从逻辑上讲,它应该具有类似于 Flash/SL 用户启动的全屏模式的机制。如果没有适用于所有人的“通用”功能,我设置窗口宽度/高度等不要回答告诉设置窗口宽度/高度,我知道怎么做,我不是在寻找它)太。

6个回答

这现在可以在最新版本的 Chrome、Firefox 和 IE(11) 中实现。

按照 Zuul 在此线程上的指示,我编辑了他的代码以包含 IE11 和全屏显示页面上任何选择元素的选项。

JS:

function toggleFullScreen(elem) {
    // ## The below if statement seems to work better ## if ((document.fullScreenElement && document.fullScreenElement !== null) || (document.msfullscreenElement && document.msfullscreenElement !== null) || (!document.mozFullScreen && !document.webkitIsFullScreen)) {
    if ((document.fullScreenElement !== undefined && document.fullScreenElement === null) || (document.msFullscreenElement !== undefined && document.msFullscreenElement === null) || (document.mozFullScreen !== undefined && !document.mozFullScreen) || (document.webkitIsFullScreen !== undefined && !document.webkitIsFullScreen)) {
        if (elem.requestFullScreen) {
            elem.requestFullScreen();
        } else if (elem.mozRequestFullScreen) {
            elem.mozRequestFullScreen();
        } else if (elem.webkitRequestFullScreen) {
            elem.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT);
        } else if (elem.msRequestFullscreen) {
            elem.msRequestFullscreen();
        }
    } else {
        if (document.cancelFullScreen) {
            document.cancelFullScreen();
        } else if (document.mozCancelFullScreen) {
            document.mozCancelFullScreen();
        } else if (document.webkitCancelFullScreen) {
            document.webkitCancelFullScreen();
        } else if (document.msExitFullscreen) {
            document.msExitFullscreen();
        }
    }
}

HTML:

<input type="button" value="click to toggle fullscreen" onclick="toggleFullScreen(document.body)">

其中“document.body”是您希望的任何元素。

另请注意,尝试从控制台运行这些全屏命令似乎不适用于 Chrome 或 IE。不过,我确实在 Firefox 中使用 Firebug 取得了成功。

需要注意的另一件事是这些“全屏”命令没有垂直滚动条,您需要在 CSS 中指定:

*:fullscreen
*:-ms-fullscreen,
*:-webkit-full-screen,
*:-moz-full-screen {
   overflow: auto !important;
}

"!important" 似乎是 IE 渲染它所必需的

这是它工作的一个例子

任何想要编辑它并将其转换为代码片段的人的快速说明,请不要打扰。该代码在 SO 代码片段中不起作用,因为它将它放在iframe.

任何可能的身体加载方法?
2021-03-15 08:36:16
哇!另一个名为 Jamie Barker 的前端开发人员!如果你在新西兰兄弟,我们应该喝啤酒。干杯!
2021-03-25 08:36:16
这很有帮助。谢谢。
2021-03-31 08:36:16
经历了几乎所有相关的线程。拯救了我的一天。谢谢 :)
2021-04-03 08:36:16
如果您想保留正文滚动条和背景,您可以尝试在 document.documentElement 而不是 document.body 上应用 toggleFullScreen 功能。
2021-04-05 08:36:16

IE的旧版本(≤6)允许的,但是,这个功能被看作是一个安全问题,所以没有现代的浏览器允许它。

您仍然可以调用 window.open(url,'','fullscreen=yes'),它可以让您完成 90% 的工作,但结果略有不同:

  • IE 打开一个只有标题栏和 URL 栏的窗口。该窗口的大小可以填满整个屏幕,并覆盖 Windows 任务栏
  • Mozilla 还会打开一个只有标题栏和 URL 栏的窗口。但是,新窗口继承了打开窗口的尺寸。如果打开的窗口是最大化的,则新窗口将最大化。(任务栏没有被覆盖。)
  • Chrome 还会打开一个只有标题栏和 URL 栏的窗口。新窗口继承了打开窗口的尺寸,但它永远不会最大化打开(即使打开窗口已最大化)。

这与您使用 JavaScript 所得到的一样接近。 你的另一个选择是在 Flash 中构建一些东西(呃!),或者只是让你的“全屏”按钮弹出一个灯箱,上面写着“按 F11 进入全屏”,然后隐藏灯箱window.resize或点击灯箱中的取消按钮.


编辑: Webkit (Safari 5.1+/Chrome 15+) 和 Firefox (10+) 已经实现了一个适当的全屏 API (首先由 Mozilla 提出,后来作为W3C 提案发布)。 这里有一个简要的历史和使用示例。 请注意,IE10 据称支持该 API。

好吧,我刚刚得到了一个“hacky”的想法,我可以在其中放置一个 Silverlight“按钮”,点击后,这将成为 FS 本身,创建一个占据 100% 空间的 Web 浏览器控件,并加载当前的 URL页面本身。但我认为它也会受到限制,因为它不会在浏览器窗口内运行,但也许它可以全屏运行,值得一试。
2021-03-18 08:36:16
@can:不可以。当 Flash/Silverlight 全屏显示时,插件会创建自己的窗口,在浏览器的知识范围之外进行处理。该插件永远无法控制原始浏览器窗口。
2021-03-21 08:36:16
感谢您的澄清。那么 Flash 或 Silverlight 可以以某种方式控制窗口全屏显示吗?就像有时在某些网站上使用页面中隐藏的 Flash 对象来执行原本不可能(没有 Flash)的操作一样,寻找类似的东西......
2021-03-23 08:36:16
“在浏览器内”也适用于全屏模式吗?它并不是真正的“在”浏览器中,它会像您所说的那样创建自己的窗口,所以也许它可以在全屏模式下工作,而我只需要在全屏模式下使用它,如果我可以与鼠标交互,它可能会帮助我解决问题。
2021-04-07 08:36:16

我想知道为什么没有人注意到所有答案都是错误的。

设置body元素,以全屏幕并不会有按F11的相同的行为。

可以通过以下方式获得 F11 的相同行为:

document.documentElement.requestFullScreen();   // on

document.cancelFullScreen();  // off

还要检查我们是否处于全屏模式,我使用以下行:

isFullScreen=()=>!(document.currentFullScreenElement==null)

这也检测是否 fullScreen 被 F11 调用:

isFullScreen=(document.documentElement.clientWidth==screen.width && document.documentElement.clientHeight==screen.height)

注意: 这必须在用户交互事件(onclick、onkeydown 等)中调用。

注意 2:当用户按下 F11 时,没有真正在全屏中设置“元素”,因此检测它的唯一方法是使用事件侦听器拦截键盘或检查客户端尺寸是否与屏幕尺寸相同**

我正在运行版本 71.0.3578.98(官方版本)(64 位)它甚至可以在 javascript 控制台中工作(你可以按 control+shift+j 弹出它),如果你写“document.documentElement.webkitRequestFullScreen(); ” 它确实会全屏显示。在正常程序中,无论如何必须在 onclick 或 onkeydown 或类似事件中。
2021-03-14 08:36:16
它必须从鼠标单击或按键按下等事件内部调用。它也适用于移动 Chrome...
2021-03-21 08:36:16
我不确定这是真的,至少对于 Chrome 71 来说不是。 document.documentElement.webkitRequestFullScreen() 返回错误:TypeError: Failed to execute 'requestFullscreen' on 'Element': parameter 1 ('options') is not an object . 其他人也有同样的问题但是按 F11 仍然有效。
2021-03-22 08:36:16
有趣的是,document.documentElement在我的答案中传入函数效果很好。至少在 Chrome 上,考虑到您的答案仅针对 Webkit 浏览器。实际上,您只是针对某个特定浏览器复制了我的答案。当然,在我的答案中添加评论建议人们使用document.documentElement而不是document.body在我的示例中对社区更有帮助这是假设它适用于所有浏览器,而不仅仅是 Chrome。
2021-03-28 08:36:16
@JamieBarker 不。document.documentElement.requestFullscreen() 的工作原理相同。我的答案关键document.documentElement,显然如果我把它放在任何其他答案中,它们都将成为我的答案:P
2021-03-29 08:36:16

您可以使用已签名的 Java 小程序执行此操作,该小程序有权运行自动化脚本以发出按键进入全屏模式。但是,除非您的用户不介意您的网站操纵他们的机器,否则这完全是一种不切实际的黑客行为。

java小程序“太”hacky了,脚本方法更可取,但是如果我可以使用Flash(或者不太好,因为它仍然不太常见,silverlight)来做到这一点,这也是一个解决方案,但是当然,对象将仅用于全屏浏览器窗口,没有其他用途
2021-04-07 08:36:16

有一个未知的库可以为您完成所有工作:

https://github.com/rafrex/fscreen

我有同样的问题,我做了(例如在react组件中):

import fscreen from 'fscreen';
.....

if (fscreen.fullscreenElement == null) {
  fscreen.requestFullscreen(document.documentElement);
}else{
  fscreen.exitFullscreen();
}

适用于 Chrome、Firefox、Safari、IE11、iOS、Android