【发布时间】:2021-12-05 09:55:49
【问题描述】:
虽然我可以运行 plain Mozilla example 以根据按键将 HTML5 video 元素置于全屏状态,但 Reveal.js 必须针对按键执行不同或异步的操作。当我尝试使用 Reveal.configure({ keyboard: { 116: putVideoInFullScreen }}) 执行此操作时,Firefox (78) 只会抱怨:
全屏请求被拒绝,因为 Element.requestFullscreen() 没有从短时间运行的用户生成的事件处理程序中调用。
同样,在 Chromium 中:
在“元素”上执行“请求全屏”失败:API 只能由用户手势启动。
坦率地说,我不明白为什么按键不是用户手势。我查看了reveal.js源代码,这一切似乎都直接通过一个注册的按键事件处理程序。
使用直接注册的处理程序(如document.addEventListener("keypress", handleKeyPress, false))的解决方法也不起作用,因为reveal.js“阻止”之前注册的事件,所以即使我有Reveal.configure({ keyboard: { 116: null }}),事件处理程序也不会接收 F5 按下。第 22 条军规。
在任何情况下我都可以强制 FF 允许我全屏显示吗?我怎样才能做到这一点?
请注意,我的 FF 屏幕已经处于全屏状态。我想做的是为video 元素切换全屏,例如
var sl = Reveal.getCurrentSlide();
var e = sl.getElementsByTagName("video")[0];
if (typeof e !== 'undefined') {
if (e.paused) {
e.play();
e.requestFullscreen(); // !!!
} else {
e.pause();
document.exitFullscreen();
};
【问题讨论】:
标签: javascript firefox reveal.js