【问题标题】:Run a website in fullscreen mode以全屏模式运行网站
【发布时间】:2015-05-30 16:15:36
【问题描述】:

我正在寻找一种技巧,让我的网站无需人工干预即可进入全屏模式。

我发现了一些使用 HTML5 技术的示例,但所有这些都需要通过人工交互来触发。

此网站将显示在电视中...

我已经考虑在全屏模式下使用 SWF 文件加载网站,但我不想朝这个方向发展,我想强调仅使用默认模式(html、css 和 javascript)的所有可能性

【问题讨论】:

  • 看看这个:davidwalsh.name/fullscreen 唯一需要注意的是它不一定适用于所有浏览器。
  • 如果网站将显示在电视上,您应该已经在使用专为电视设计的操作系统,而且这些操作系统通常已经具备全屏浏览器。
  • 我不会对电视使用任何细节......这是一个通用网站。

标签: javascript html fullscreen


【解决方案1】:

您不能强制网站以全屏模式显示。

如果可能的话,想象一下安全问题。
恶意网站可能会“劫持”计算机知识较少的人的桌面,用于各种可疑的业务。

所有的 JS 全屏 api 都会抛出如下错误:
"Failed to execute 'requestFullScreen' on 'Element': API can only be initiated by a user gesture." 如果您尝试简单地从您的代码中调用它。

我非常确定 Flash 是相似的,因为它需要用户交互才能全屏显示。否则,我们会看到相当多的几乎不可能关闭的全屏弹出窗口。

【讨论】:

  • 想象一下有人将一个看起来很像 Windows 的 Web 应用程序(entirely possible)拼凑在一起,然后打开一个“Web 浏览器”并询问社会安全号码。我知道我妈妈无法区分(虽然她不会进入她的社交网站,但她比那更清楚)。
  • @jsve:这正是我的意思是恶意的。这就是正是在没有用户交互的情况下无法访问全屏的原因。
  • 只是一个小问题:这里的“用户手势”是什么意思?似乎只有click或keydown事件,而不是mousemove事件。
【解决方案2】:

其他答案已经描述了如何以或多或少独立于浏览器的方式全屏显示。 但是,需要用户交互的问题仍然存在。


出于安全原因,您不能强制网页以全屏模式显示。 为此需要用户交互。

此外,每当用户转到另一个页面时,即使在同一个网站上,浏览器也会退出全屏模式,并且(s)他必须在每个页面上执行一些“用户交互”才能返回全屏模式。
这就是为什么您的网站必须是单页才能全屏显示的原因。


这就是我的建议: 使用具有隐藏 iFrame 的单个启动页面。

每当用户点击任意位置或按下任意键时,只需将此 iFrame 设置为全屏并显示即可。当您收到离开全屏模式的事件时,再次隐藏 iFrame 以显示启动画面。

默认情况下,链接在同一框架中打开,因此您将保持全屏模式,直到用户明确离开它或某些链接在新选项卡中打开。

这是一个适用于 Chrome 的示例:
See it in action. 使用其他答案使其独立于浏览器。)

<html>
<head>
    <script language="jscript">
        function goFullscreen() {
            // Must be called as a result of user interaction to work
            mf = document.getElementById("main_frame");
            mf.webkitRequestFullscreen();
            mf.style.display="";
        }
        function fullscreenChanged() {
            if (document.webkitFullscreenElement == null) {
                mf = document.getElementById("main_frame");
                mf.style.display="none";
            }
        }
        document.onwebkitfullscreenchange = fullscreenChanged;
        document.documentElement.onclick = goFullscreen;
        document.onkeydown = goFullscreen;
    </script>
</head>
<body style="margin:0">
    <H1>Click anywhere or press any key to browse <u>Python documentation</u> in fullscreen.</H1>
    <iframe id="main_frame" src="https://docs.python.org" style="width:100%;height:100%;border:none;display:none"></iframe>
</body>
</html>

但是请注意,网站通常不允许嵌入,例如在 iframe 中显示。该示例最初使用 W3Schools 网站而不是 Python 文档,但他们将“X-Frame-Options”标头设置为“sameorigin”(不允许跨站点嵌入)并且它停止工作。


附:我喜欢在浏览器中模拟完整操作系统的想法,而且全屏效果更好! :) Change your OS!
另外,我不是网络开发人员。只是觉得这个问题调查起来会很有趣。

【讨论】:

  • 感谢您添加一个实际有用的答案 - 与其他反对者不同,您提供了一个有效的解决方案,而不是无用的咆哮。太棒了。
【解决方案3】:

您也许可以使用https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Using_full_screen_mode 中描述的 requestFullScreen() 方法。

注意:这仍然需要用户输入 - 但要避免使用闪存。

function toggleFullScreen() {
  if (!document.fullscreenElement &&    // alternative standard method
      !document.mozFullScreenElement && !document.webkitFullscreenElement && !document.msFullscreenElement ) {  // current working methods
    if (document.documentElement.requestFullscreen) {
      document.documentElement.requestFullscreen();
    } else if (document.documentElement.msRequestFullscreen) {
      document.documentElement.msRequestFullscreen();
    } else if (document.documentElement.mozRequestFullScreen) {
      document.documentElement.mozRequestFullScreen();
    } else if (document.documentElement.webkitRequestFullscreen) {
      document.documentElement.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT);
    }
  } else {
    if (document.exitFullscreen) {
      document.exitFullscreen();
    } else if (document.msExitFullscreen) {
      document.msExitFullscreen();
    } else if (document.mozCancelFullScreen) {
      document.mozCancelFullScreen();
    } else if (document.webkitExitFullscreen) {
      document.webkitExitFullscreen();
    }
  }
}

toggleFullScreen();

这允许页面激活全屏,并且可能通过 javascript 页面上的页面加载来激活。但是,不支持旧版浏览器。

【讨论】:

  • 您不能在没有用户交互的情况下调用这些函数。这就是OP首先发布此问题的原因。他的问题的唯一答案是在没有用户交互的情况下初始化全屏,是“不能做”
  • Failed to execute 'requestFullScreen' on 'Element': API can only be initiated by a user gesture.
  • 这个函数可以在你有像onClick这样的用户手势时执行,但你不能从你的代码中强制
【解决方案4】:

当我需要做类似的事情时,我使用了闪屏。继续进入全屏模式的按钮请求它作为 JS pop 的属性:

 onClick="window.open('pageName.html', 'test', 'fullscreen=yes')"

这不是完全证明,但比我发现的任何其他方法都好。如果没有用户交互,您可能无法做到这一点,因此使用闪屏之类的东西可以最大限度地减少对更普遍接受的东西的干扰。

【讨论】:

  • 我的浏览器默认会阻止这样的弹出窗口。
  • @Cerbrus 说得好。几年前我就设置了这个,在弹出窗口拦截器还很普遍之前。
  • 如果您已经在使用 onclick 事件...为什么不将当前网页设置为全屏?
【解决方案5】:

这并不是 OP 想要的,但在我的特殊情况下,我发现了 kiosk 模式和一些动态样式的组合。

我希望使用特定 URL 启动浏览器并让它以全屏模式启动。用例是在带有状态屏幕的制造工厂的终端上几乎没有用户交互。开机后,只需要显示状态而不进行交互(即,除非用户交互,否则不显示任何配置 UI 元素)。

也许,在复杂的网站上不现实,但我使用的是特定的“窗格”(在本例中为 div)元素。为了专注于特定的 div,我隐藏了其他 div,并相应地设置了样式。如果碰巧有用户交互从全屏切换到全屏,我 (1) 使用常规的 myElement.*requestFullScreen() document.*exitFullscreen() 调用,(2) 显示/隐藏其他 div,以及 (3) 切换下面的类之间:

.right-pane-fullscreen
{
    margin-left: 0px;
}

.right-pane-normal
{
    margin-left: 225px;
}

关于如何在 Chrome 中使用 kiosk 模式的相关讨论(请注意,在启动 kiosk 模式之前运行的其他 Chrome 进程可能会阻止此工作) Opening Chrome browser in full window or kiosk mode on windows 7

【讨论】:

    猜你喜欢
    • 2015-02-23
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 2014-01-10
    • 2012-06-13
    • 2011-07-01
    相关资源
    最近更新 更多