代码之家  ›  专栏  ›  技术社区  ›  Ta01

Javascript中的跨浏览器Flash检测

  •  94
  • Ta01  · 技术社区  · 16 年前

    15 回复  |  直到 16 年前
        1
  •  110
  •   Andrew Ensley    7 年前

    我同意 Max Stewart . SWFObject

    确保您已包括 swfobject.js 归档(获取它) here

    <script type="text/javascript" src="swfobject.js"></script>
    

    然后像这样使用它:

    if(swfobject.hasFlashPlayerVersion("9.0.115"))
    {
        alert("You have the minimum required flash version (or newer)");
    }
    else
    {
        alert("You do not have the minimum required flash version");
    }
    

    用所需的最低闪存版本替换“9.0.115”。我选择9.0.115作为示例,因为它是添加了h.264支持的版本。

    如果访问者没有flash,它将报告“0.0.0”的flash版本,因此如果您只想知道他们是否有flash,请使用:

    if(swfobject.hasFlashPlayerVersion("1"))
    {
        alert("You have flash!");
    }
    else
    {
        alert("You do not flash :-(");
    }
    
        2
  •  94
  •   pranavcode Max Stewart    8 年前
        3
  •  36
  •   Community CDub    8 年前

    我知道这是一个老帖子,但我已经找了一段时间,没有找到任何东西。
    我已经实现了 JavaScript Flash Detection Library . 它工作得很好,并且有文档记录以供快速使用。我花了2分钟。以下是我在标题中编写的代码:

    <script src="Scripts/flash_detect.js"></script>
    <script type="text/javascript"> 
     if (!FlashDetect.installed) {
        alert("Flash is required to enjoy this site.");         
     } else {
        alert("Flash is installed on your Web browser.");
     }
    </script>        
    
        4
  •  32
  •   stewe    13 年前

    closure compiler 要生成小型跨浏览器闪存检测,请执行以下操作:

    // ==ClosureCompiler==
    // @compilation_level ADVANCED_OPTIMIZATIONS
    // @output_file_name default.js
    // @formatting pretty_print
    // @use_closure_library true
    // ==/ClosureCompiler==
    
    // ADD YOUR CODE HERE
    goog.require('goog.userAgent.flash');
    if (goog.userAgent.flash.HAS_FLASH) {
        alert('flash version: '+goog.userAgent.flash.VERSION);
    }else{
        alert('no flash found');
    }
    

    这将产生以下“已编译”代码:

    var a = !1,
        b = "";
    
    function c(d) {
        d = d.match(/[\d]+/g);
        d.length = 3;
        return d.join(".")
    }
    if (navigator.plugins && navigator.plugins.length) {
        var e = navigator.plugins["Shockwave Flash"];
        e && (a = !0, e.description && (b = c(e.description)));
        navigator.plugins["Shockwave Flash 2.0"] && (a = !0, b = "2.0.0.11")
    } else {
        if (navigator.mimeTypes && navigator.mimeTypes.length) {
            var f = navigator.mimeTypes["application/x-shockwave-flash"];
            (a = f && f.enabledPlugin) && (b = c(f.enabledPlugin.description))
        } else {
            try {
                var g = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"),
                    a = !0,
                    b = c(g.GetVariable("$version"))
            } catch (h) {
                try {
                    g = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"), a = !0, b = "6.0.21"
                } catch (i) {
                    try {
                        g = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"), a = !0, b = c(g.GetVariable("$version"))
                    } catch (j) {}
                }
            }
        }
    }
    var k = b;
    a ? alert("flash version: " + k) : alert("no flash found");
    
        5
  •  22
  •   tomasdev    12 年前

    我使用过的最低版本(不检查版本,只检查Flash插件):

    var hasFlash = function() {
        return (typeof navigator.plugins == "undefined" || navigator.plugins.length == 0) ? !!(new ActiveXObject("ShockwaveFlash.ShockwaveFlash")) : navigator.plugins["Shockwave Flash"];
    };
    
        6
  •  8
  •   Kent Brewster    16 年前

    Carl Yestrau的JavaScript Flash检测库,如下所示:

    http://www.featureblend.com/javascript-flash-detection-library.html

    ... 可能就是你要找的。

        7
  •  7
  •   Joeri Sebrechts    16 年前

    也许adobe的flash player检测工具包在这里会有所帮助?

    http://www.adobe.com/products/flashplayer/download/detection_kit/

        8
  •  5
  •   Carl S Yestrau Carl S Yestrau    16 年前

    我对SWFObject和Adobe的解决方案产生的质量和不符合标准的标记感到非常失望。此外,我的测试发现Adobe的自动更新程序不一致且不可靠。

    The JavaScript Flash Detection Library (Flash Detect) JavaScript Flash HTML Generator Library (Flash TML)

    -“卢克读了来源!”

        9
  •  5
  •   trante    12 年前

    一艘班轮的代码 isFlashExists

    <script type='text/javascript'
        src='//ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js'> </script>
    
    <script type='text/javascript'>
       var isFlashExists = swfobject.hasFlashPlayerVersion('1') ? true : false ;
       if (isFlashExists) {
        alert ('flash exists');
       } else {
        alert ('NO flash');
       }
    </script>
    

    请注意,有这样一种替代方案: swfobject.getFlashPlayerVersion();

        10
  •  3
  •   hitautodestruct    12 年前

    http://whatsmy.browsersize.com (第14-120行)。

    这是抽象的跨浏览器 code on jsbin 对于 仅限闪光检测 工作环境:FF/IE/Safari/Opera/Chrome。

        11
  •  3
  •   Martin Bommeli    11 年前

    那么:

    var hasFlash = function() {
        var flash = false;
        try{
            if(new ActiveXObject('ShockwaveFlash.ShockwaveFlash')){
                flash=true;
            }
        }catch(e){
            if(navigator.mimeTypes ['application/x-shockwave-flash'] !== undefined){
                flash=true;
            }
        }
        return flash;
    };
    
        12
  •  3
  •   bizi    11 年前

    如果您对纯Javascript解决方案感兴趣,下面是我从中复制的解决方案 Brett

    function detectflash(){
        if (navigator.plugins != null && navigator.plugins.length > 0){
            return navigator.plugins["Shockwave Flash"] && true;
        }
        if(~navigator.userAgent.toLowerCase().indexOf("webtv")){
            return true;
        }
        if(~navigator.appVersion.indexOf("MSIE") && !~navigator.userAgent.indexOf("Opera")){
            try{
                return new ActiveXObject("ShockwaveFlash.ShockwaveFlash") && true;
            } catch(e){}
        }
        return false;
    }
    
        13
  •  1
  •   bitinn    12 年前

    function testFlash() {
    
        var support = false;
    
        //IE only
        if("ActiveXObject" in window) {
    
            try{
                support = !!(new ActiveXObject("ShockwaveFlash.ShockwaveFlash"));
            }catch(e){
                support = false;
            }
    
        //W3C, better support in legacy browser
        } else {
    
            support = !!navigator.mimeTypes['application/x-shockwave-flash'];
    
        }
    
        return support;
    
    }
    

    注意:避免检查 ,某些手机浏览器已点击以启用flash插件,并将触发假阴性。

        14
  •  0
  •   Stephan Kristyn    14 年前

    要创建符合标准的Flash对象(但是使用JavaScript),我建议您看一下

    http://www.bobbyvandersluis.com/ufo/index.html

        15
  •  0
  •   Nazik mark    12 年前

    创造了一个小 .swf 它重定向。如果浏览器已启用flash,它将重定向。

    package com.play48.modules.standalone.util;
    
    import flash.net.URLRequest;
    
    
    class Redirect {
    
    
    static function main() {
    
        flash.Lib.getURL(new URLRequest("http://play48.com/flash.html"), "_self");
    
    }
    
    }
    
        16
  •  0
  •   chickens    6 年前

    布尔hasFlash()

    如果浏览器有flash,则返回。

    function hasFlash(){
        var b = !1;
        function c(a) {if (a = a.match(/[\d]+/g)) {a.length = 3;}}
        (function() {
        if (navigator.plugins && navigator.plugins.length) {
            var a = navigator.plugins["Shockwave Flash"];
            if (a && (b = !0, a.description)) {c(a.description);return;}
            if (navigator.plugins["Shockwave Flash 2.0"]) {b = !0;return;}
        }
        if (navigator.mimeTypes && navigator.mimeTypes.length && (a = navigator.mimeTypes["application/x-shockwave-flash"], b = !(!a || !a.enabledPlugin))) {c(a.enabledPlugin.description);return;}
        if ("undefined" != typeof ActiveXObject) {
            try {
                var d = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");b = !0;c(d.GetVariable("$version"));return;
            } catch (e) {}
            try {
                d = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");b = !0;
                return;
            } catch (e) {}
            try {
                d = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"), b = !0, c(d.GetVariable("$version"));
            } catch (e) {}
        }
        })();
        return b;
    }
    

    如果闪存版本大于提供的版本,则返回

    function isFlashVersion(version) {
        var e = String.prototype.trim ? function(a) {return a.trim()} : function(a) {return /^[\s\xa0]*([\s\S]*?)[\s\xa0]*$/.exec(a)[1]};
        function f(a, b) {return a < b ? -1 : a > b ? 1 : 0};
        var h = !1,l = "";
        function m(a) {a = a.match(/[\d]+/g);if (!a) {return ""}a.length = 3;return a.join(".")}
        (function() {
            if (navigator.plugins && navigator.plugins.length) {
                var a = navigator.plugins["Shockwave Flash"];
                if (a && (h = !0, a.description)) {l = m(a.description);return}
                if (navigator.plugins["Shockwave Flash 2.0"]) {h = !0;l = "2.0.0.11";return}
            }
            if (navigator.mimeTypes && navigator.mimeTypes.length && (a = navigator.mimeTypes["application/x-shockwave-flash"], h = !(!a || !a.enabledPlugin))) {l = m(a.enabledPlugin.description);return}
            if ("undefined" != typeof ActiveXObject) {
                try {
                    var b = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");h = !0;l = m(b.GetVariable("$version"));return
                } catch (g) {}
                try {
                    b = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");h = !0;l = "6.0.21";return
                } catch (g) {}
                try {
                    b = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"), h = !0, l = m(b.GetVariable("$version"))
                } catch (g) {}
            }
        })();
        var n = l;
        return (function(a) {
            var b = 0,g = e(String(n)).split(".");
            a = e(String(a)).split(".");
            for (var p = Math.max(g.length, a.length), k = 0; 0 == b && k < p; k++) {
                var c = g[k] || "",d = a[k] || "";
                do {
                    c = /(\d*)(\D*)(.*)/.exec(c) || ["", "", "", ""];d = /(\d*)(\D*)(.*)/.exec(d) || ["", "", "", ""];
                    if (0 == c[0].length && 0 == d[0].length) {break}
                    b = f(0 == c[1].length ? 0 : parseInt(c[1], 10), 0 == d[1].length ? 0 : parseInt(d[1], 10)) || f(0 == c[2].length, 0 == d[2].length) || f(c[2], d[2]);c = c[3];d = d[3]
                } while (0 == b);
            }
            return 0 <= b
        })(version)
    }