用 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 的<embed>
。将显示的代码另存为.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 播放器的现代或不推荐的方法?的主要内容,如果未能解决你的问题,请参考以下文章
ActionScript 3 AS3检测flash播放器类型 - broswer插件,独立,IDE等