【问题标题】:How can I detect if Flash is installed and if not, display a hidden div that informs the user?如何检测是否安装了 Flash,如果没有,显示通知用户的隐藏 div?
【发布时间】:2010-11-03 03:37:37
【问题描述】:

如何使用 javascript/jQuery/etc 来检测是否安装了 Flash,如果未安装,则显示一个 div,其中包含通知用户需要安装 Flash 的信息?

【问题讨论】:

    标签: javascript jquery asp.net-mvc flash detection


    【解决方案1】:

    使用 swf 对象。如果已安装,它将用 Flash 替换 div。 见:http://code.google.com/p/swfobject/

    【讨论】:

      【解决方案2】:

      您可以使用 navigator.mimeTypes。

      if (navigator.mimeTypes ["application/x-shockwave-flash"] == undefined)
          $("#someDiv").show ();
      

      【讨论】:

        【解决方案3】:

        如果swfobject 不够用,或者您需要创建一些更定制的东西,试试这个:

        var hasFlash = false;
        try {
            hasFlash = Boolean(new ActiveXObject('ShockwaveFlash.ShockwaveFlash'));
        } catch(exception) {
            hasFlash = ('undefined' != typeof navigator.mimeTypes['application/x-shockwave-flash']);
        }
        

        它适用于 7 和 8。

        【讨论】:

        • 如果您只是想检测它是否已安装而不一定要以任何方式显示 swf,这会很好。
        • 必须修改为:var hasFlash = false;试试 { var fo = (navigator.mimeTypes && navigator.mimeTypes['application/x-shockwave-flash']) ? navigator.mimeTypes['application/x-shockwave-flash'].enabledPlugin : 0; if(fo) hasFlash = true; }catch(e){ if(navigator.mimeTypes ['application/x-shockwave-flash'] != undefined) hasFlash = true; }"
        • 这在 IE7 上不起作用,因为您没有测试 activexobject 部分
        • 赞成使用 5 行 JavaScript 而不是使用整个库
        • 这适用于 android 移动浏览器,如 firefox 和 chrome 吗?
        【解决方案4】:

        我使用了 Adob​​e 的检测工具包,最初由 justpassinby 建议。他们的系统很好,因为它会检测版本号并将其与您的“所需版本”进行比较

        一件坏事是它会发出警报,显示检测到的闪存版本,这对用户不是很友好。突然弹出一个框,里面有一些看似随机的数字。

        您可能需要考虑的一些修改:

        • 删除警报
        • 改变它,使它返回一个对象(或数组) --- 第一个元素是布尔值 true/false,表示“是否在用户机器上找到了所需的版本” --- 第二个元素是在用户机器上找到的实际版本号

        【讨论】:

          【解决方案5】:

          jqplugin:http://code.google.com/p/jqplugin/

          $.browser.flash == true
          

          【讨论】:

            【解决方案6】:

            如果 Flash 插件被禁用但已安装,@Drewid 的回答在我的 Firefox 25 中不起作用。

            @invertedSpear 在该答案中的评论在 Firefox 中有效,但在任何 IE 版本中无效。

            所以结合了他们的代码并得到了这个。在 Google Chrome 31、Firefox 25、IE 8-10 中测试。感谢 Drewid 和倒置的Spear :)

            var hasFlash = false;
            try {
              var fo = new ActiveXObject('ShockwaveFlash.ShockwaveFlash');
              if (fo) {
                hasFlash = true;
              }
            } catch (e) {
              if (navigator.mimeTypes
                    && navigator.mimeTypes['application/x-shockwave-flash'] != undefined
                    && navigator.mimeTypes['application/x-shockwave-flash'].enabledPlugin) {
                hasFlash = true;
              }
            }
            

            【讨论】:

            • 可靠的答案。谢谢你的救命稻草:)
            • 适用于 Firefox 39 (2015-08-03)。
            • 如果允许插件但 Flash 被明确阻止我们正在检查的网站,则它不起作用。 Safari 8.0.8。在这种情况下,hasFlash 仍然是 true(应该是 false)。
            • 非常好。谢谢!
            • 又短又甜
            【解决方案7】:

            你应该也可以使用..

            swfobject.getFlashPlayerVersion().major === 0
            

            使用swfobject-Plugin。

            【讨论】:

            • swfobject 未定义。
            【解决方案8】:

            http://www.featureblend.com/javascript-flash-detection-library.html 的极小版本(仅布尔闪光检测)

            var isFlashInstalled = (function(){
            var b=new function(){var n=this;n.c=!1;var a="ShockwaveFlash.ShockwaveFlash",r=[{name:a+".7",version:function(n){return e(n)}},{name:a+".6",version:function(n){var a="6,0,21";try{n.AllowScriptAccess="always",a=e(n)}catch(r){}return a}},{name:a,version:function(n){return e(n)}}],e=function(n){var a=-1;try{a=n.GetVariable("$version")}catch(r){}return a},i=function(n){var a=-1;try{a=new ActiveXObject(n)}catch(r){a={activeXError:!0}}return a};n.b=function(){if(navigator.plugins&&navigator.plugins.length>0){var a="application/x-shockwave-flash",e=navigator.mimeTypes;e&&e[a]&&e[a].enabledPlugin&&e[a].enabledPlugin.description&&(n.c=!0)}else if(-1==navigator.appVersion.indexOf("Mac")&&window.execScript)for(var t=-1,c=0;c<r.length&&-1==t;c++){var o=i(r[c].name);o.activeXError||(n.c=!0)}}()};  
            return b.c;
                })();
            
            if(isFlashInstalled){
                // Do something with flash
                }else{
                // Don't use flash  
                    }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2022-11-23
              • 2012-09-22
              • 2019-05-04
              • 2015-10-21
              • 1970-01-01
              相关资源
              最近更新 更多