Как JavaScript может обнаружить, что Firefox спросит пользователя, разрешить ли запуск Flash? - PullRequest
0 голосов
/ 02 мая 2019

У нас есть большая детская Flash-игра, которая еще не конвертирована в HTML5. Для аналитики и хорошего UX, мы хотим заранее знать, собирается ли браузер спрашивать детей, разрешать ли Flash до запуска нашей игры. Наш текущий код прекрасно работает в Chrome, но в FF он говорит, что Flash включен, даже если он не включен (пока пользователь не разрешит это).

Я перепробовал все, что нашел в StackOverflow и в других местах, но он все еще думает, что Flash полностью включен (в FF), когда это не так. Использование navigator.plugins или navigator.mimeTypes просто говорит, что все хорошо. Ниже мой текущий код (моя попытка использовать swfobject.hasFlashPlayerVersion опущена):

/**
 * Determine whether the Flash plugin is enabled.
 *
 * @returns {string} - 'Enabled', 'Disabled', 'StatusUnknown' (for Firefox when it says it's enabled)
 *   'Disabled' = not installed, or installed but disabled, or enabled but not allowed for this site.
 */
function flashStatus() {
    var installed = false;
    for (var i = 0;i < navigator.plugins.length;i++) {
        if (navigator.plugins[i].name.toLowerCase().indexOf('shockwave') !== -1) {
            installed = true;
            break;
        }
    }
    /**
     * The above code would falsely say that Flash was enabled on FF when it would actually ask the user.
     * So I tried adding this:
     */
    var enabled = false;
    if (installed) {
        var types = navigator.mimeTypes;
        for(i = 0 ; i < types.length ; i++){
            var type = types[i];
            var pluginName = type.description.toLowerCase();
            if (pluginName.indexOf('shockwave') > -1){
                enabled = !!type.enabledPlugin;
                break;
            }
        }
    }
    /**
     * That's not working either.  So if FF says the plugin is installed and enabled, I don't believe it:
     */
    if (installed && enabled) {
        /**
         * Firefox says Flash is enabled even when it's going to ask the user.
         * Log Flash status as unknown.
         */
        if (window.navigator.userAgent.match(/Firefox/)) {
            return 'StatusUnknown';
        }
    }
    return (installed && enabled)? 'Enabled' : 'Disabled';
}

Мне бы очень хотелось узнать, когда из-за этого блокируются игроки.

В случае, если это имеет значение, остальная часть кода на странице все еще использует swfobject-2.2.js для установки фактического Flash. Это кажется достаточным для Chrome. Вы можете увидеть живую версию на https://www.poptropica.com/game/ - она ​​может иметь или не иметь вышеуказанную функцию к тому времени, как вы ее прочитаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...