dart 如何发现canvas.requestFullscreen()失败的原因?

qaxu7uf2  于 2023-05-11  发布在  其他
关注(0)|答案(2)|浏览(181)

目前的任务是为用Dart编写的WebGL应用程序添加对全屏模式的支持。
canvas.requestFullscreen()适用于简单的测试用例,但在完整的应用程序上失败。
请指出是什么阻止浏览器切换到全屏的方法。
代码为:

void trapFullscreenError() {
  document.onFullscreenError.listen((e) {
    log("fullscreenerror: $e");
  });
}

void toggleFullscreen(CanvasElement c) {
  log(
      "fullscreenSupport=${document.fullscreenEnabled} fullscreenElement=${document.fullscreenElement}"
      );

  if (document.fullscreenElement != null) {
    log("exiting fullscreen");
    document.exitFullscreen();
  } else {
    log("requesting fullscreen");
    c.requestFullscreen();
  }
}

在Chrome中,该代码导致:

fullscreenSupport=true fullscreenElement=null
requesting fullscreen
fullscreenerror: Instance of 'Event'

Dartium调试器显示以下字段:

Event [id=4]
_selector null
bubbles true
cancelable false
clipboardData null
currentTarget #document [id=5]
defaultPrevented false
eventPhase 3
hashCode 234642739
path NodeList[6] [id=6]
target canvas#main_canvas [id=7]
timeStamp 1398779450832
type "webkitfullscreenerror"
2admgd59

2admgd591#

出于安全原因,requestFullscreen只能在键盘或单击事件的事件处理程序中调用。
参见Javascript request fullscreen is unreliable

7cwmlq89

7cwmlq892#

我不知道你是否还在想这个。但是我已经通过在渲染器中标识事件内部的domElement成功地实现了它

renderer.domElement.requestFullscreen()

相关问题