【问题标题】:Exit full screen on Angular when starting with full screen从全屏开始时在 Angular 上退出全屏
【发布时间】:2020-10-26 11:34:32
【问题描述】:

当以全屏方式启动 chrome 时,在 Angular 上退出全屏不起作用。

html:

<hello name="{{ name }}"></hello>
<a href="https://angular-go-full-screen-f11-key.stackblitz.io" target="_blank" style="display: block;">
  Open in new window
</a>
<button (click)="openFullscreen()">Go full screen</button>
<button (click)="closeFullscreen()">Exit full screen</button>

ts:

import { DOCUMENT } from '@angular/common';
import { Component, Inject, OnInit } from '@angular/core';

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: [ './app.component.css' ]
})
export class AppComponent implements OnInit {
  constructor(@Inject(DOCUMENT) private document: any) {}
  elem;

  ngOnInit() {
    this.elem = document.documentElement;
  }

  openFullscreen() {
    if (this.elem.requestFullscreen) {
      this.elem.requestFullscreen();
    } else if (this.elem.mozRequestFullScreen) {
      /* Firefox */
      this.elem.mozRequestFullScreen();
    } else if (this.elem.webkitRequestFullscreen) {
      /* Chrome, Safari and Opera */
      this.elem.webkitRequestFullscreen();
    } else if (this.elem.msRequestFullscreen) {
      /* IE/Edge */
      this.elem.msRequestFullscreen();
    }
  }

  /* Close fullscreen */
  closeFullscreen() {
    if (document.exitFullscreen) {
      this.document.exitFullscreen();
    } else if (this.document.mozCancelFullScreen) {
      /* Firefox */
      this.document.mozCancelFullScreen();
    } else if (this.document.webkitExitFullscreen) {
      /* Chrome, Safari and Opera */
      this.document.webkitExitFullscreen();
    } else if (this.document.msExitFullscreen) {
      /* IE/Edge */
      this.document.msExitFullscreen();
    }
  }
}

这是stackblitz sample.

打开上面的页面(和“在新窗口中打开”)时,“进入全屏”和“退出全屏”按钮起作用。

但是当使用如下全屏选项打开此页面时,“退出全屏”按钮不起作用。

chrome.exe --start-fullscreen https://angular-go-full-screen-f11-key.stackblitz.io

为什么以全屏模式启动时“退出全屏”不起作用?我该如何解决这个问题?

【问题讨论】:

    标签: javascript angular typescript google-chrome


    【解决方案1】:

    用户代理发起的“全屏”操作(例如,从 --start-fullscreen 标志开始或使用 F11 进入全屏)与 Fullscreen-API 发起的“requestFullscreen”调用之间似乎存在差异。

    打开 DevTools 并添加 Live-expression 以观看 document.fullscreenElement 时,您可以看到,使用 F11--start-fullscreen 时未设置,但使用 Fullscreen-API 时已设置。 document.exitFullscreen() 仅在设置 document.fullscreenElement 时有效。

    https://developer.mozilla.org/en-US/docs/Web/API/DocumentOrShadowRoot/fullscreenElement

    一个可能的解决方案可能是依赖一个 URL 参数并在组件逻辑中切换到全屏以防它被设置?

    请参阅https://stackblitz.com/edit/angular-go-full-screen-f11-key-xiq6va?file=src%2Fapp%2Fapp.component.ts 了解启动全屏的演示。

    【讨论】:

    • 感谢您的回复。但我得到了Failed to execute 'requestFullscreen' on 'Element': API can only be initiated by a user gesture. 错误。
    • 这可能是个问题,也取决于浏览器。在Chrome / Windows上,在加载StackBlitz时输入全屏按照预期的工作(当标签在前景时),Firefox会阻止它。我对 StackBlitz 做了一些调整,这可能有助于告诉用户如何离开全屏模式。为了检查这一点,我尝试确定如何进入全屏模式(通过全屏 API 或通过浏览器本身),并根据上下文向用户显示相应的提示。见angular-go-full-screen-f11-key-xiq6va.stackblitz.io
    • 我的答案/cmets 中是否还缺少某些内容?
    • 抱歉回复晚了。不幸的是,我的应用程序将用于触摸屏,无法使用 F11。
    • 那么你可以简单地改变提示让用户告诉他该做什么:superuser.com/questions/1146929/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    • 1970-01-01
    • 1970-01-01
    • 2010-11-20
    相关资源
    最近更新 更多