Detecting Pepper (PPAPI) Flash with Javascript

后端 未结 5 1280
悲&欢浪女
悲&欢浪女 2021-02-10 21:14

We are using a proprietary document viewer which doesn\'t play terribly nice with the Pepper version of Flash found in some flavors of Chrome, so I\'d like to be able to detect

5条回答
  •  情书的邮戳
    2021-02-10 21:55

    I think it should be done this way:

    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;
    

    Demo on jsFiddle.


    UPD №1: Not sure if needed, but I wrote a little explanation:

    If our browser has a MIME types enumeration, we can get a plugin associated with a specified type. So we're getting plugin which associated with 'application/x-shockwave-flash' and check if its filename is 'pepflashplayer.dll'. I think that this name is constant and will not be changed in future.


    UPD №2:

    To enable/disable PPAPI in Google Chrome, you should go to this page: chrome://plugins/

    (Sorry, this URL needs to be pasted directly into the address bar.)


    UPD №3:

    I did some investigation and found an interesting article that helped me to implement a cross-platform solution. I think that this code should work on all OS:

    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;
    

    Check out an updated fiddle.


    UPD №4:

    Slightly changed the code to meet today's realities. Now condition looks like this:

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

    Check out jsFiddle.

提交回复
热议问题