JavaScript如何检测Firefox将询问用户是否允许Flash运行?

时间:2019-05-01 22:37:31

标签: javascript flash firefox

我们有一个大型Flash儿童游戏,尚未转换为HTML5。对于分析和良好的用户体验,我们想提前知道浏览器是否会在运行我们的游戏之前询问孩子是否允许Flash。我们当前的代码在Chrome中可以很好地运行,但是在FF中,即使没有启用Flash,它都表示启用了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/上看到实时版本-在您阅读本文时,它可能具有上面的功能。

0 个答案:

没有答案