0

我编写了以下代码段以使窗口全屏显示。

docElm.requestFullscreen();

当我打开一个 url 以在同一个窗口中打开时,新的 url 使窗口退出全屏。我使用以下内容转到下一个网址,

window.location.assign("/settings");

如何解决此问题并使窗口保持全屏显示。

4

1 回答 1

1

这不是问题,是可以预料的。

有两个原因:

技术的

导航到新站点时,与全屏模式绑定的文档或其元素之一不再可用或无效。文档或元素未被引用,浏览器将恢复到正常模式。

浏览器中的全屏模式并不是您在 ActiveX / 视频播放器中看到的实际全屏模式。它们只是以全屏显示的元素覆盖(例如,由浏览器内部定义的 CSS 规则)。这会创建对当前 DOM 和文档的依赖。

新站点不必具有相同顺序的相同元素等,并且从浏览器的角度来看是一个全新的 DOM 树。

安全

全屏模式仅适用于当前 url,并且必须由每个站点的用户允许。

假设用户允许当前站点但不允许下一个站点 - 如果您的解决方案可以将用户引导到全屏模式下的第二个站点,那么您的解决方案将违反用户的偏好。

在当前的Fullscreen API 文档下,您可以在第 4 节下找到建立全屏模式的标准之一:

存在先前确定的用户偏好、安全风险或平台限制。

当浏览器导航到一个新的 url 而没有用户允许它的全屏模式时,标准的第一部分不满足。

这当然意味着新导航的站点在允许之前不会以全屏模式显示。

这很重要,因为

用户代理应该确保,例如通过覆盖,最终用户知道某些东西是全屏显示的。用户代理应该提供一种退出全屏的方法,该方法始终有效,并向用户宣传这一点。这是为了防止站点在全屏时通过重新创建用户代理甚至操作系统环境来欺骗最终用户。另见 requestFullscreen() 的定义。

为了防止嵌入内容全屏显示,只有通过 HTML iframe 元素的 allowfullscreen 属性特别允许的嵌入内容才能全屏显示。这可以防止不受信任的内容全屏显示。

涉及安全问题,这就是为什么浏览器在更改 url 时不允许您继续全屏模式的原因。

Fullscreen API目前处于实验状态。

可能的解决方法

您可以通过 AJAX 提供内容以更新页面。

如果您的意图是允许用户以全屏模式浏览各种站点,则需要在浏览器级别解决此问题,即。创建一个应用程序,它以一种或另一种方式为 IE 或 WebKit 实现类似 .Net WebBrowser 的引擎 - 或 - 分叉现有的 WebKit 浏览器并在源代码级别覆盖此行为。

然后,您可以随意允许以全屏模式进行浏览。

于 2013-08-30T06:11:59.587 回答