我已经编写了以下代码段来将窗口设置为全屏。
docElm.requestFullscreen();
当我在同一个窗口中打开一个url时,新的url会使窗口脱离fulscreen。我用下面的网址转到下一个网址,
window.location.assign("/settings");
如何解决此问题并使窗口保持全屏显示。
这不是问题,是意料之中的事。
这有两个原因:
技术
导航到新网站时,全屏模式绑定到的文档或其元素之一不再可用或无效。文档或元素未被引用,浏览器将恢复到正常模式。
浏览器中的全屏模式并不是像您在ActiveX/视频播放器中看到的那样的实际全屏模式。它们只是以屏幕的全尺寸显示的元素覆盖(例如,通过浏览器内部定义的CSS规则)。这创建了对当前DOM和文档的依赖关系。
新站点不需要以相同的顺序具有相同的元素等,从浏览器的角度来看,它是一个全新的DOM树。
安全性
全屏模式只允许用于当前url,并且必须由用户为每个网站允许。
假设用户允许当前站点,但不允许下一个站点——如果您的解决方案可以在全屏模式下将用户引导到第二个站点,则您的解决方法将违反用户的偏好。
在当前的Fullscreenneneneba API文档中,您可以在第4节中找到。建立全屏模式的标准之一:
存在先前确定的用户偏好、安全风险或平台限制。
当浏览器在没有用户允许全屏模式的情况下导航到一个新的url时,标准的第一部分是不满足的
这当然意味着,在获得许可之前,新导航的网站不会以全屏模式显示。
这很重要,因为:
用户代理应确保,例如通过覆盖用户知道某个内容显示为全屏。用户代理应提供一种退出全屏的方式,该方式始终有效并做广告这是给用户的。这是为了防止网站欺骗最终用户当全屏显示。另请参阅requestFullscreen()的定义。
防止嵌入内容变成仅全屏嵌入通过HTML iframe元素将能够全屏显示。这样可以防止不受信任的内容无法全屏显示。
其中涉及到安全问题,这就是为什么浏览器不允许您在更改url时继续全屏模式的原因。
全屏幕API目前处于实验状态。
可能的解决方法
您可以通过AJAX提供内容来更新页面。
如果您的意图是允许用户以全屏模式浏览各种网站,则需要在浏览器级别解决此问题,即创建一个应用程序,该应用程序以某种方式实现ie或WebKit的.Net WebBrowser之类的引擎,或者分叉现有的WebKit浏览器,并在源代码级别覆盖此行为。
然后你可以允许在全屏模式下随意浏览。