flash在chrome中的状态检测

前前言

chrome 更新太快了,文章的内容已过时!
chrome 更新太快了,文章的内容已过时!
chrome 更新太快了,文章的内容已过时!chrome

前言

随着chrome的更新,以前的一些依赖flash的代码逻辑可能再也不准确了。最近作了一些测试,总结一下。浏览器

测试时间:2016年12月。测试版本:win chrome 55。测试

正文

代码中,可能有一些功能是须要flash支持的,可能同时选用了其余技术,这时候就就要写一些逻辑去判断flash的状态,以便选择技术实现。spa

以目前的了解,能够把flash在chrome中的状态分红4种:插件

  • 未安装code

  • 已安装被停用对象

  • 已安装已启用未容许(当前域使用flash)ip

  • 已安装已启用已容许flash

是否停用指的是chrome://plugins中设置是否停用flash:it

clipboard.png

是否容许指的是右上角出现阻断提示时的随手设置,或在chrome://settings/content中的Flash设置:

clipboard.png

clipboard.png

下面来分析下这4种状态。

1. 未安装

通常使用navigator.plugins["Shockwave Flash"]检测chrome中flash安装的状况,奇怪的是,目前即便没有安装flash,这段代码仍然能够检测到flash信息。

经查阅资料和验证,未安装flash的chrome中查看chrome://plugins插件信息,虽然有Adobe Flash Player的信息,但“位置”一项显示的是“internal-not-yet-present”:

clipboard.png

而正常安装flash时:

clipboard.png

二者代码的区别是这样的:

clipboard.pngclipboard.png

因此能够经过filename这个属性来检测是否安装了flash。

2. 已安装被停用

flash被停用时,navigator.plugins["Shockwave Flash"]没法检测到flash信息:
clipboard.png

因此这种状态很轻松就能够判断。

3. 已安装已启用未容许

这种状态的问题在于,浏览器确实安装了flash,navigator.plugins["Shockwave Flash"]也能够检测到安装了flash。而当前页面却不容许使用flash(chrome的限制策略)。

这种状态没法从navigator.plugins中检测,由于结果没有任何异样。

但由于浏览器限制了flash,因此flash对象是没法成功建立的。能够设置定时器不断查询有没有建立成功,而后设置一个超时次数,好比50次,若是尚未建立成功的话,能够认为是建立超时,标明这种状态。

暂时没有想到更好的判断方法。

不过检测这种状态颇有意义。用户是已经安装了flash的。只是未容许flash运行,这时候能够简单提示用户设置容许运行就能够。通常chrome拦截时,右上角会有拦截设置:

clipboard.png

4. 已安装已启用已容许

这种状态一切正常,能够正常使用flash。上文已经提到,插件对象的filename字段会显示真正的文件名:

clipboard.png

补充

不过flash最终是要被取代的技术。保证flash相关代码稳定的同时,也要调研替代技术啦。

相关文章
相关标签/搜索