Chrome71版本使用screenfull.js全屏功能时报参数错误

最近因为浏览器更新了,使用好好的screenfull.js突然报错了:Failed to execute 'requestFullscreen' on 'Element': parameter 1 ('options') is not an object

于是进入node_modules找到screenfull.js的模块,找到报错的地方,

	elem = elem || document.documentElement;

			// Work around Safari 5.1 bug: reports support for
			// keyboard in fullscreen even though it doesn't.
			// Browser sniffing, since the alternative with
			// setTimeout is even worse.
			if (/ Version\/5\.1(?:\.\d+)? Safari\//.test(navigator.userAgent)) {
				elem[request]();
			} else {
				 elem[request](keyboardAllowed && Element.ALLOW_KEYBOARD_INPUT);
			}

 

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

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

navigationUI 的值:

auto : 默认 ,交给处理

hide : 隐藏导航界面

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

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

于是,只要对这个文件的上部分增加一个判断即可

	elem = elem || document.documentElement;

			// Work around Safari 5.1 bug: reports support for
			// keyboard in fullscreen even though it doesn't.
			// Browser sniffing, since the alternative with
			// setTimeout is even worse.
			if (/ Version\/5\.1(?:\.\d+)? Safari\//.test(navigator.userAgent)) {
				elem[request]();
			} else {
				// elem[request](keyboardAllowed && Element.ALLOW_KEYBOARD_INPUT);
				if (keyboardAllowed) {
					elem[request](Element.ALLOW_KEYBOARD_INPUT);
				} else {
					elem[request]({ navigationUI: "auto" });
				}
			}

然后保存,再重新点击全屏,即不会报错了(注意,若果重新安装了依赖可能问题会重新出现,得重新修改)。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值