用 js/jquery 检测 Flash 播放器的现代或不推荐的方法?

Posted

技术标签:

【中文标题】用 js/jquery 检测 Flash 播放器的现代或不推荐的方法?【英文标题】:Modern or Non-deprecated way to detect flash player with js/jquery? 【发布时间】:2017-08-01 09:19:31 【问题描述】:

首先,很抱歉在这里再次提出这个问题。 我已经尝试了两天如何使用 javascript/jquery 来完成这项工作,我想我已经阅读了所有堆栈溢出和其他博客文章,所以请不要将其标记为重复,因为我不能使用从 2012 年开始过时的脚本现在在 2017 年。

我有一个页面重定向到第三方电子学习平台,其中一些内容需要 Flash 才能工作。许多用户不关心他们的机器上安装了哪些软件(多么新,呵呵)所以我需要检测它并显示典型消息“请点击此处安装/更新 Flash 播放器”,但我找不到“现代" 在任何地方执行此操作的脚本/方式,尽可能简化。

我尝试过的所有脚本都已弃用或在所有浏览器中返回 false,即使我已安装并激活了最新版本的 flash。

我们将不胜感激任何帮助(很明显,旧帖子或脚本的链接除外)。

非常感谢!

【问题讨论】:

SWFObject - 仍在工作。 github.com/swfobject/swfobject 是的,但自 2017 年 2 年多 以来,它未维护 【参考方案1】:

有一种检查 Flash 的简单方法,因为所有安装和启用插件都将列在navigator.plugins;

请注意,如果安装了插件,但未启用,则不会在navigator.plugins 数组中检测到它。 NO 方法可以使用 Javascript 检测到这一点(这个 Question 确认相同)。

话虽如此,使用下面的函数isFlashEnabled();来检测Flash:

<html>

<script>

if(isFlashEnabled()) 
 document.write('Flash is installed (but may need to be enabled)');  
else  document.write('Flash is either not installed or disabled'); 

function isFlashEnabled() 

    var flash = navigator.plugins.namedItem('Shockwave Flash');
    if (!flash)  return 0;  
    else  return 1; 


</script>

<body> <embed src="https://www.w3schools.com/tags/helloworld.swf"> </body>

</html>

【讨论】:

@JoëlBonetRodríguez 是的,是原生 JS/原生 JS,这是跨浏览器兼容。在 Chrome、Firefox、Opera 和 Safari 上测试(在 MacOS、ubuntu 上)未在 IE 上测试,但我确信它应该适用于 IE9+ 此外,这与我几天前发布的几乎完全相同的答案,你是如何设法让它在 Firefox 上工作的?至少对我来说,它不适用于最新版本。 @opp 因为我的回答和你的回答几乎相同,但不完全相同。在我的回答中,我只在全局插件数组中检查已安装的插件,这就是为什么我的解决方案适用于所有浏览器,包括 Firefox(您可以尝试在 FF 上运行 sn-p 来验证) 在第二个代码块(来自 mozilla)中,我也只检查命名插件。但是没关系! sn-p 不适用于我最新的 FF (v 52.0) @opp 此代码有效!!我已经在 Windows Firefox(版本 52)上对其进行了测试。为了清楚起见,我已将其编辑为 SWF 的&lt;embed&gt;。将显示的代码另存为.html 并进行测试。转到about:addons 并选择“从不激活”(+ 刷新 html 选项卡)与 “要求激活”(+ 选项卡刷新)。【参考方案2】:

你可以像这样得到一个包含浏览器所有已安装插件的数组:

var plugins = navigator.plugins;

然后您可以检查该数组是否包含 Flash 插件。

来自https://developer.mozilla.org/de/docs/Web/API/NavigatorPlugins/plugins:

function getFlashVersion() 
   var flash = navigator.plugins.namedItem('Shockwave Flash');
   if (typeof flash != 'object') 
      // flash is not present
      return undefined;
   
   if(flash.version) 
     return flash.version;
    else 
     //No version property (e.g. in Chrome)
     return flash.description.replace(/Shockwave Flash /,"");
  

【讨论】:

非常感谢!我会尽快尝试(当分配给这项工作的时间),我会提供反馈。 在 Firefox 上,我在安装了 flash 的 PC 上遇到错误(未定义 flash)...你知道为什么吗? 我猜由于安全原因,它不再可能检测到 Firefox 上是否安装了 Flash。 @JoëlBonetRodríguez 你是怎么得到这个错误的?我没有收到 Firefox 的任何回复。只是空白页(即使在尝试document.write 反馈文本之后)。

以上是关于用 js/jquery 检测 Flash 播放器的现代或不推荐的方法?的主要内容,如果未能解决你的问题,请参考以下文章

Flash 播放器未通过采集卡检测摄像机视频

检测我的 .swf 导出到哪个目标 Flash 播放器版本

ActionScript 3 AS3检测flash播放器类型 - broswer插件,独立,IDE等

怎么检测浏览器有没有flash播放器

有没有js、jquery插件或者flash插件,可以对图片进行多个区域的高亮显示(遮罩显示)?

JSFL:检测元素何时被翻转