在生产环境长期使用的一个“全屏”功能突然失效了,查看Console 如下报错:

Failed to execute 'requestFullscreen' on 'Element': parameter 1 ('options') is not an object

项目引入了第三方的一个全屏兼容包 “screenfull.js” , 大致翻阅了下源代码,对各浏览器非标准的实现做了一个映射,定位到出错行:

  1. ...
  2. var keyboardAllowed =
  3. typeof Element !== "undefined" && "ALLOW_KEYBOARD_INPUT" in Element;
  4. ...
  5. if (/ Version\/5\.1(?:\.\d+)? Safari\//.test(navigator.userAgent)) {
  6. elem[request]();
  7. } else {
  8. elem[request](keyboardAllowed && Element.ALLOW_KEYBOARD_INPUT);
  9. }

此处调用requestFullscreen 时传入的是一个布尔值,是通过判断Element.ALLOW_KEYBOARD_INPUT的到的,该值意为支持键盘输入。实际测试在71,70 及 59 版本 该值均是 undefined ,而且不传入也同样可以键盘输入。不太清楚是否是早期版本非标准的实现。

查阅MDN文档,Chrome在71版本实现了 FullscreenOptions (划重点),该参数参数必须是一个对象,实测 undefined 或不传也是可以的 ,但传入一个布尔值就直接抛出了异常。对象属性只有一个 navigationUI。

navigationUI 的值:

auto : 默认 ,交给处理

hide : 隐藏导航界面

show: 显示导航界面,收缩界面元素留出更多的空间给页面展示。

我在chrome中又尝试了这个几个值,未发现界面有什么不同之处。

原因已经查明,只要简单做下修改即可,如果担心早期版本报错,那么简单做一个判断吧:

  1. if (/ Version\/5\.1(?:\.\d+)? Safari\//.test(navigator.userAgent)) {
  2. elem[request]();
  3. } else {
  4. if (keyboardAllowed) {
  5. elem[request](Element.ALLOW_KEYBOARD_INPUT);
  6. } else {
  7. elem[request]({ navigationUI: "auto" });
  8. }
  9. }

重新打包 OK

Chrome71版本使用screenfull.js全屏功能时报参数错误的更多相关文章

  1. vue 中使用 screenfull.js 全屏插件

    参考网址: https://blog.csdn.net/houyibing930920/article/details/89214200 https://www.jianshu.com/p/cfbb1 ...

  2. JS实现元素的全屏、退出全屏功能

     在实际开发中,我们很可能需要实现某一元素的全屏和退出全屏功能,如canvas.所幸的是,js提供了相关api用来处理这一问题,只需简单的调用requestFullScreen.exitFullScr ...

  3. js 实现操作浏览器或者元素的全屏与退出全屏功能

    <!DOCTYPE html> <html lang="en" id="div1"> <head> <meta cha ...

  4. 关于最近在做的一个js全屏轮播插件

    最近去面试了,对方要求我在一个星期内用原生的js代码写一个全屏轮播的插件,第一想法就是跟照片轮播很相似,只是照片轮播是有定义一个宽高度大小已经确定了的容器用来存储所有照片,然后将照片全部左浮动,利用m ...

  5. 富文本编辑器vue2-editor实现全屏功能

    vue2-editor非常不错,可惜并未带全屏功能,自己实现了一个,供大家参考. 实现思路:自定义模块. 1. 定义全屏模块Fullscreen /** * 编辑器的全屏实现 */ import no ...

  6. JS全屏漂浮广告、移入光标停止移动

    点击这里查看效果 以下是代码: <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Ty ...

  7. [HTML]JS全屏代码

    video全屏参考:https://www.thecssninja.com/javascript/fullscreen <!doctype html> <html> <h ...

  8. 基于Ascensor.js全屏切换页面插件

    今天给大家分享一款基于Ascensor.js全屏切换页面插件,这款实例 适用浏览器:IE8.360.FireFox.Chrome.Safari.Opera.傲游.搜狗.世界之窗.效果图如下: 在线预览 ...

  9. JS全选功能代码优化

    原文:JS全选功能代码优化 JS全选功能代码优化 最近在看javascript MVC那本书,也感觉到自己写的代码也并不优雅,所以一直在想 用另一种模式来编写JS代码,所以针对之前的简单的JS全选功能 ...

随机推荐

  1. Django学习---原生ajax

    Ajax 原生ajax Ajax主要就是使用 [XmlHttpRequest]对象来完成请求的操作,该对象在主流浏览器中均存在(除早起的IE),Ajax首次出现IE5.5中存在(ActiveX控件). ...

  2. TCAM CAM 说明 原理 结构 Verilog 硬件实现

    TCAM 三态内容地址查找存储器,CAM内容地址查找存储器.区别在于TCAM多了一级掩码功能,也就是说可以指定某几位是dont care.匹配的时候0,1都行的意思. 广泛应用于数据流处理领域,本文简 ...

  3. centos7 二进制安装MySQL5.7.22

    1.详细描安装的过程 1.1关闭防火墙 systemctl stop firewalld.service #停止firewall systemctl disable firewalld.service ...

  4. filebeat 笔记

    认识Beats Beats是用于单用途数据托运人的平台.它们以轻量级代理的形式安装,并将来自成百上千台机器的数据发送到Logstash或Elasticsearch. (画外音:通俗地理解,就是采集数据 ...

  5. Golang之实现一个负载均衡算法(随机,轮询)

    代码记录 程序结构目录 --------程序包 package balance type Balancer interface { DoBalance([]*Instance, ...string) ...

  6. kafka分布式虚拟机群部署配置方法

    1 配置jdk8 假设安装(解压)路径:jdk1.8.0 修改/etc/profile,增加以下设置并保存 Export JAVA_HOME=jdk1.8.0 Export PATH=$JAVA_HO ...

  7. smarty foreach

    <{foreach from=$data item=val }> <tr align="center"> <td><{$val.item_ ...

  8. [.NET] WeakReference的使用

    声明:本篇博客翻译自:http://tipsandtricks.runicsoft.com/CSharp/WeakReferences.html 由于水平(技术水平+英语理解能力)有限/不足,肯定会有 ...

  9. util:properties

    示例 <util:properties id="db" location="classpath:db.properties" /> 全部属性 功能概 ...

  10. mysql 字段名是关键字 报错

    DROP TABLE IF EXISTS `bas_dictionary`; CREATE TABLE `bas_dictionary` ( `id` ) NOT NULL AUTO_INCREMEN ...