जावास्क्रिप्ट में क्रॉस ब्राउज़र फ्लैश डिटेक्शन


97

क्या किसी के पास स्क्रिप्ट का एक उदाहरण है जो IE / फ़ायरफ़ॉक्स भर में अच्छी तरह से काम कर सकता है ताकि यह पता लगाया जा सके कि ब्राउज़र एम्बेडेड फ़्लैश सामग्री प्रदर्शित करने में सक्षम है या नहीं। मैं मज़बूती से कहता हूं क्योंकि मुझे पता है कि इसका 100% समय संभव नहीं है।


मैं देख रहा हूं कि आपने जोरी के जवाब को पहले ही स्वीकार कर लिया है, लेकिन आपको वास्तव में गंभीरता से विचार करना चाहिए। यह बहुत अधिक मजबूत और कम ब्लोटी है।
बजे मैट लोहकैंप

जवाबों:


94

SWFObject बहुत विश्वसनीय है। मैंने काफी समय तक बिना परेशानी के इसका इस्तेमाल किया है।


यहाँ भी, SWFObject मेरे लिए बहुत अच्छा काम करता है (जिसे FlashObject कहा जाता है, लेकिन Adobe ने एक
हसी

17
JQuery और swfobject के साथ, यह वह कोड है जिसका उपयोग मैंने मॉर्डनिजर-स्टाइल html वर्ग के नाम जोड़ने के लिए किया: $('html').addClass(typeof swfobject !== 'undefined' && swfobject.getFlashPlayerVersion().major !== 0 ? 'flash' : 'no-flash');
जॉन z

2
अगर किसी को दिलचस्पी है तो मैंने इनमें से कुछ मामलों का परीक्षण jsperf पर किया है। SWFObject सबसे तेज़ निकला।
हितुटोडेस्ट्रक्ट

if( swfobject.hasFlashPlayerVersion("8.0") ) { }यदि कोई फ़्लैश स्थापित नहीं है, तो झूठा के साथ swfobject का उपयोग करके फ़्लैश की जाँच करें । संख्या आवश्यक न्यूनतम फ़्लैश प्लेयर संस्करण है।
काई नैक

hitautodestruct, बेशक SWFObject सबसे तेज़ निकला। यह केवल पृष्ठ लोड पर एक बार वास्तविक पता लगाता है और फिर इसे हर बार संग्रहीत मूल्यों को वापस लौटाता है। चूँकि आप जिस तरह से अन्य विधियों का उपयोग कर रहे हैं, वैसे ही प्रदर्शन की तुलना उचित नहीं है।
एरिकोस

109

मैं मैक्स स्टीवर्ट से सहमत हूं । SWFObject जाने का रास्ता है। मैं एक कोड उदाहरण के साथ उसका जवाब पूरक करना चाहता हूं। यह आपको आरंभ करने के लिए चाहिए:

सुनिश्चित करें कि आपने swfobject.jsफ़ाइल शामिल कर ली है (इसे यहां प्राप्त करें ):

<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 समर्थन जोड़ा है।

यदि विज़िटर के पास फ्लैश नहीं है, तो यह "0.0.0" के फ्लैश संस्करण की रिपोर्ट करेगा, इसलिए यदि आप जानना चाहते हैं कि क्या उनके पास फ्लैश है, तो उपयोग करें:

if(swfobject.hasFlashPlayerVersion("1"))
{
    alert("You have flash!");
}
else
{
    alert("You do not flash :-(");
}

9
महान। मैं बस किसी भी फ़्लैश का पता लगाने के एक बहुत ही सरल उदाहरण को खोजने के लिए संघर्ष कर रहा था। धन्यवाद।
ब्रायन स्कॉट

2
इस उदाहरण के लिए धन्यवाद! अगर उपयोगकर्ता फ्लैश के बिना था और किसी भी तरह से एम्बेड करने के लिए पहले से ही swfobject का उपयोग कर रहा था, तो कुछ अन्य जावास्क्रिप्ट चलाने की आवश्यकता है। :)
कोनटुर

इसके साथ एक समस्या है, आपको SWFobject के लिए एक चेक शामिल करना होगा या आपको एक त्रुटि मिल जाएगी क्योंकि अपरिभाषित में hasFlashPlayerVersion () नाम का फ़ंक्शन नहीं है। if(SWFobject && SWFobject.hasFlashPlayerVersion("1")) { // code here }
ई-कॉम

जाहिर है, मेरा कोड मानता है कि आपके पास SWFObject लोड है। यह सिर्फ एक समाधान के लिए jQuery या किसी अन्य पुस्तकालय का उपयोग करने जैसा है। यदि आप इसे शामिल नहीं करते हैं तो यह काम नहीं करेगा, और यदि आपने इसका इस्तेमाल किया है तो लाइब्रेरी के लिए जाँच करने पर यह बहुत अधिक अतिरिक्त ब्लोट / निष्पादन तर्क होगा।
एंड्रयू एन्स्ले

@ और: मुझे पता है कि यह पोस्ट साढ़े चार साल पुरानी है, लेकिन यह उन लोगों के लिए इतना स्पष्ट नहीं है जो SWFObject के साथ काम करने के लिए अभ्यस्त नहीं हैं। मैं फ़ाइल अपलोड के लिए एक कोणीय ऐड-ऑन का उपयोग कर रहा हूं जो कि फ्लैश का समर्थन करता है यदि एचटीएमएल 5 समर्थित नहीं है, और फ्लैश का पता नहीं चलने पर संदेश प्रदर्शित करना चाहता था। यह मेरे लिए स्पष्ट नहीं था कि SWFObject एक पुस्तकालय था जिसे लोड करने की आवश्यकता थी, या अगर यह ब्राउज़र में फ्लैश प्लेयर की स्थापना के माध्यम से ऑटो-लोड किया गया था। अपनी टिप्पणी में स्पष्ट करने के लिए धन्यवाद, लेकिन कृपया इसे अपने उत्तर में जोड़ने पर विचार करें।
ट्रैस्टी 3

36

मुझे पता है कि यह एक पुरानी पोस्ट है, लेकिन मैं कुछ समय से देख रहा हूं और मुझे कुछ भी नहीं मिला।
मैंने जावास्क्रिप्ट फ्लैश डिटेक्शन लाइब्रेरी को लागू किया है । यह बहुत अच्छी तरह से काम करता है और इसे त्वरित उपयोग के लिए प्रलेखित किया जाता है। यह सचमुच मुझे 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>        

यह अब क्रोम और फ़ायरफ़ॉक्स 6+ पर विफल रहता है!
बाल्ट

वैध लगता है - नवीनतम संस्करण बहुत अच्छी तरह से या मुझे काम करता है। धन्यवाद, अच्छा काम जारी रखें!
कविता

धन्यवाद। मुझे यह लाइब्रेरी पसंद है क्योंकि इसमें एक प्रहरी swf की आवश्यकता नहीं है। मुझे आशा है कि आप इसे अद्यतन रखेंगे!
निक वान ब्रंट

यह उत्तर होना चाहिए ... :)
sabinonstack

32

आप एक छोटे, क्रॉस-ब्राउज़र फ्लैश का पता लगाने के लिए क्लोजर कंपाइलर का उपयोग कर सकते हैं :

// ==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");

3
यह समाधान हमारी राय में सबसे साफ है। अगर फ्लैश स्थापित है, तो हम पता लगाने के लिए एक swfobject / पुस्तकालय मुक्त विधि की तलाश कर रहे थे। यह चाल है। धन्यवाद!
अनाम-एक

बहुत बढ़िया समाधान :) .. आपने मेरा दिन बचाया।
अरिंदम पॉल

@ गुमनाम-एक की शिकायत करने के लिए नहीं, लेकिन क्या यह समाधान एक पुस्तकालय (विशेष रूप goog.userAgent.flashसे Google के क्लोजर कंपाइलर से) का उपयोग नहीं करता है ? मैं बस यह सुनिश्चित करना चाहता हूं कि मैं यहां कुछ बारीक अंतर याद नहीं कर रहा हूं।
एंड्रयू एन्स्ले

हम पहले स्निपेट का उपयोग नहीं कर रहे हैं। हम 2 का उपयोग कर रहे हैं। जो 'पुस्तकालय मुक्त' है।
अनाम-एक

यह सबसे शुद्ध और सबसे गहन उत्तर है जो मैंने देखा है कि सभी ब्राउज़रों को कवर करने के लिए लगता है। धन्यवाद।
हार्टलेसान

22

न्यूनतम संस्करण जो मैंने कभी उपयोग किया है (संस्करण की जाँच नहीं करता है, बस फ्लैश प्लगइन):

var hasFlash = function() {
    return (typeof navigator.plugins == "undefined" || navigator.plugins.length == 0) ? !!(new ActiveXObject("ShockwaveFlash.ShockwaveFlash")) : navigator.plugins["Shockwave Flash"];
};

2
अच्छा और छोटा, मुझे यह पसंद है!
माइक नेल्सन

@ greg.kindel मैं लंबे समय से इसका उपयोग कर रहा हूं, और यह मेरे द्वारा परीक्षण किए गए संस्करणों के लिए काम करता है। हालांकि, यदि आप OS संस्करण और IE संस्करण भी निर्दिष्ट करते हैं, तो यह मददगार हो सकता है;)
टॉम रोजगारो

त्रुटि संदेश के साथ विन 7 के तहत IE 9.0.17 में काम नहीं करता है: "स्वचालन सर्वर ऑब्जेक्ट नहीं बना सकता है"। यह स्थापना पर निर्भर करता है। कुछ कंप्यूटरों पर यह कुछ पर काम करता है।
ज़ेंससुला

@Zensursula: मैंने ActiveXObject के आसपास {} कैच () की कोशिश की और अपवाद क्लॉज में गलत लिखा। अब यह मेरे लिए भी काम कर रहा है
जेनसुर्ला

1
@ एक टन चीजें ऐसा कर सकती थीं। लेकिन डिफ़ॉल्ट सुरक्षा स्तरों द्वारा नहीं होना चाहिए।
टॉम रोजगारो



5

एक वेब दस्तावेज़ के भीतर फ्लैश का पता लगाना और एम्बेड करना आश्चर्यजनक रूप से मुश्किल काम है।

मैं SWFObject और Adobe के समाधान दोनों से उत्पन्न गुणवत्ता और गैर-मानक अनुपालन मार्कअप से बहुत निराश था। इसके अतिरिक्त, मेरे परीक्षण में पाया गया कि Adobe का Auto updater असंगत और अविश्वसनीय है।

जावास्क्रिप्ट फ्लैश डिटेक्शन लाइब्रेरी (फ्लैश डिटेक्ट) और जावास्क्रिप्ट फ्लैश एचटीएमएल जेनरेटर लाइब्रेरी (फ्लैश टीएमएल) एक सुपाठ्य, बनाए रखने योग्य और मानकों के अनुरूप मार्कअप समाधान हैं।

- "ल्यूक स्रोत पढ़ें!"


4

एक लाइनर 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();


3

स्रोत देखें http://whatsmy.browsersize.com (लाइनें 14-120)।

यहाँ फ्लैश डिटेक्शन के लिए jsbin पर एबस्ट्रेटेड क्रॉस ब्राउज़र कोड है , इस पर काम करता है: FF / IE / Safari / Opera / Chrome।


क्या आप कुछ कोड या कम से कम एक लिंक प्रदान कर सकते हैं कि आपने अपनी साइट पर उत्तर कैसे प्राप्त किया?
१५:०५

@hitautodestruct यदि आप पृष्ठ का स्रोत देखते हैं, तो इसका उत्तर सीधे जेएस ब्लॉक के शीर्ष पर है।
ऐटिस गोरल

तो अनिवार्य रूप से इस कोड (jsbin लिंक) के बारे में बात कर रहे थे ?
हितुटोडेस्ट्रक्ट

@hitautodestruct हाँ, detectObject()IE के लिए प्रतिपक्ष।
एतेस गोराल

3

किस बारे में:

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;
};

3

यदि आप एक शुद्ध जावास्क्रिप्ट समाधान में रुचि रखते हैं, तो यहां वह है जिसे मैं ब्रेट से कॉपी करता हूं :

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;
}

1

यदि आप यह जांचना चाहते हैं कि फ्लैश सक्षम है या नहीं, तो यह पर्याप्त होना चाहिए।

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;

}

नोट: EnablePlugin को चेक करने से बचें , कुछ मोबाइल ब्राउज़र में फ्लैश-टू-इनेबल फ्लैश प्लगइन है, और यह झूठे नकारात्मक को ट्रिगर करेगा।



0

एक छोटा सा बनाया है .swfजो पुनर्निर्देश करता है। यदि ब्राउज़र फ्लैश सक्षम है, तो यह पुनर्निर्देशित होगा।

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");

}

}

0

Google क्लोजर कंपाइलर goog.require ('goog.userAgent.flash') लाइब्रेरी का उपयोग करके मैंने यह 2 फ़ंक्शन बनाए।

बूलियन हैफलैश ()

ब्राउजर फ्लैश होने पर वापस लौटता है।

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)
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.