ฉันจะตรวจสอบได้อย่างไรว่ามีการติดตั้ง Flash ไว้หรือไม่ให้แสดง div ที่ซ่อนอยู่เพื่อแจ้งให้ผู้ใช้ทราบ


88

ฉันจะใช้ javascript / jQuery / etc เพื่อตรวจสอบได้อย่างไรว่ามีการติดตั้ง Flash ไว้หรือไม่หากไม่มีให้แสดง div ที่มีข้อมูลแจ้งให้ผู้ใช้ทราบว่าจำเป็นต้องติดตั้งแฟลช

คำตอบ:



159

หากswfobjectไม่พอเพียงหรือคุณต้องการสร้างสิ่งที่เป็นส่วนตัวขึ้นมาอีกเล็กน้อยให้ลองทำดังนี้:

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

ใช้งานได้กับ 7 และ 8


2
ใช้งานได้ดีหากคุณต้องการตรวจสอบว่ามีการติดตั้งหรือไม่และไม่จำเป็นต้องแสดง swf ด้วยวิธีใดก็ได้
ctrlShiftBryan

10
ต้องแก้ไขสิ่งนี้เป็น: var hasFlash = false; ลองใช้ {var fo = (navigator.mimeTypes && navigator.mimeTypes ['application / x-shockwave-flash']) ไหม navigator.mimeTypes ['application / x-shockwave-flash']. enablePlugin: 0; ถ้า (สำหรับ) hasFlash = true; } catch (e) {if (navigator.mimeTypes ['application / x-shockwave-flash']! = undefined) hasFlash = true; } "
invertedSpear

1
ซึ่งจะไม่ทำงานบน IE7 เนื่องจากคุณไม่ได้ทดสอบส่วน activexobject
Kevin

1
โหวตเพิ่มการใช้ JavaScript 5 บรรทัดแทนการใช้ไลบรารีทั้งหมด
Alex W

สิ่งนี้จะใช้ได้กับเบราว์เซอร์มือถือ Android เช่น firefox และ chrome?
Maniprakash Chinnasamy

104

คำตอบของ @ Drewid ใช้ไม่ได้ใน Firefox 25 ของฉันหากเพิ่งปิดใช้งานปลั๊กอินแฟลช แต่ติดตั้งแล้ว

ความคิดเห็นของ @ invertedSpear ในคำตอบนั้นใช้งานได้ใน firefox แต่ไม่ใช่ในเวอร์ชัน IE ใด ๆ

ดังนั้นรวมรหัสทั้งสองและได้สิ่งนี้ ทดสอบใน Google Chrome 31, Firefox 25, IE 8-10 ขอบคุณ Drewid และ invertedSpear :)

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

1
คำตอบที่มั่นคง Thnx for the life saver :)
Gogol

1
ทำงานใน Firefox 39 (2015-08-03)
Vladimir Vukanac

1
ไม่สามารถใช้งานได้หากอนุญาตให้ใช้ปลั๊กอิน แต่ Flash ถูกบล็อกอย่างชัดเจนสำหรับเว็บไซต์ที่เรากำลังตรวจสอบ Safari 8.0.8 ในกรณีนี้ hasFlash ยังคงเป็นจริง (ควรเป็นเท็จ)
Eugenio

ดีมาก. ขอบคุณ!
Koby Douek

1
สั้นและหวาน
Sohail Faruqui




2

ฉันใช้ชุดตรวจจับของ Adobe ซึ่งเดิมแนะนำโดย justpassinby ระบบของพวกเขาดีเพราะตรวจพบหมายเลขเวอร์ชันและเปรียบเทียบกับคุณกับ 'เวอร์ชันที่ต้องการ'

สิ่งที่ไม่ดีอย่างหนึ่งคือการแจ้งเตือนแสดงแฟลชเวอร์ชันที่ตรวจพบซึ่งไม่เป็นมิตรกับผู้ใช้มากนัก ทันใดนั้นกล่องก็ปรากฏขึ้นพร้อมกับตัวเลขสุ่มบางอย่าง

การปรับเปลี่ยนบางอย่างที่คุณอาจต้องการพิจารณา:

  • ลบการแจ้งเตือน
  • เปลี่ยนเพื่อให้ส่งคืนวัตถุ (หรืออาร์เรย์) --- องค์ประกอบแรกคือบูลีนจริง / เท็จสำหรับ "เป็นเวอร์ชันที่ต้องการที่พบในเครื่องของผู้ใช้" --- องค์ประกอบที่สองคือหมายเลขเวอร์ชันจริงที่พบในเครื่องของผู้ใช้

1

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  
        }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.