使用Javascript检测Pepper(PPAPI)Flash

And*_*H-D 4 javascript flash google-chrome ppapi

我们使用的是专有的文档查看器,它在某些版本的Chrome中找不到与Pepper版本相同的Flash版本,因此我希望能够检测到它并以不同的格式重定向到相同的内容.

由于这个版本似乎落后于NPAPI,我一直在使用FlashDetect来查找版本号,但这需要每日更新.我宁愿不看UserAgent,因为它是导致麻烦而不是浏览器的Flash架构,但有没有任何方法用Javascript做到这一点?

Igo*_*tin 16

我认为应该这样做:

var isPPAPI = false;
var type = 'application/x-shockwave-flash';
var mimeTypes = navigator.mimeTypes;

if (mimeTypes && mimeTypes[type] && mimeTypes[type].enabledPlugin &&
    mimeTypes[type].enabledPlugin.filename == 'pepflashplayer.dll') isPPAPI = true;
Run Code Online (Sandbox Code Playgroud)

演示jsFiddle.


UPD№1:不确定是否需要,但我写了一点解释:

如果我们的浏览器具有MIME类型枚举,我们可以获得与指定类型相关联的插件.所以我们得到与之关联的插件'application/x-shockwave-flash'并检查其文件名是否为'pepflashplayer.dll'.我认为这个名字是不变的,将来也不会改变.


UPD№2:

要在Google Chrome中启用/停用PPAPI,您应该转到此页面: chrome://plugins/

(对不起,这个URL需要直接粘贴到地址栏中.)


UPD№3:

我做了一些调查,发现了一篇有趣的文章,帮助我实现了跨平台的解决方案.我认为这段代码应适用于所有操作系统:

var isPPAPI = false;
var type = 'application/x-shockwave-flash';
var mimeTypes = navigator.mimeTypes;

var endsWith = function(str, suffix) {
    return str.indexOf(suffix, str.length - suffix.length) !== -1;
}

if (mimeTypes && mimeTypes[type] && mimeTypes[type].enabledPlugin &&
   (mimeTypes[type].enabledPlugin.filename == "pepflashplayer.dll" ||
    mimeTypes[type].enabledPlugin.filename == "libpepflashplayer.so" ||
    endsWith(mimeTypes[type].enabledPlugin.filename, "Chrome.plugin"))) isPPAPI = true;
Run Code Online (Sandbox Code Playgroud)

查看更新的小提琴.


UPD№4:

略微改变了代码以满足当今的现实.现在条件看起来像这样:

if (mimeTypes && mimeTypes[type] && mimeTypes[type].enabledPlugin &&
   (mimeTypes[type].enabledPlugin.filename.match(/pepflashplayer|Pepper/gi))) isPPAPI = true;
Run Code Online (Sandbox Code Playgroud)

退房jsFiddle.

  • 请注意,查找dll假设您只关心Windows.PPAPI Flash已经在Linux上使用,并且在OS X上的Canary中使用. (2认同)