201207231744JavaScript 偵測瀏覽器是否支援 Flash

一直有這個需求,因為 iOS Safari 不支援 Flash ,但那時是用 User Agent 判斷,兜出來類似這樣:

function isIOS() {
  var ua = navigator.userAgent;
  return (
      ua.match(/iPad/i) ||
      ua.match(/iPhone/i) ||
      ua.match(/iPod/i)
    ) ? true : false;
}

現在又多一個瀏覽器不支援 Flash , Metro 版的 IE 10 ,只好修改判斷。結果發現 User Agent 竟然分不出 Metro 版和 Desktop 版 IE 10 。第一個念頭是「 IE 又在找麻煩了!」 XD 。但氣消之後,想想這次 IE 還算有道理。用 User Agent 判斷本來就不是好方法,應該從瀏覽器是否支援 Flash 判斷。

所以問題變成如何判斷瀏覽器是否支援 Flash 。找了一下,找到這篇 Cross Browser Flash Detection in Javascript - Stack Overflow ,裡面建議用 SWFObject 判斷,但是 SWFObject 一大包,我只需要一小段,所以就開原始碼來看啦。大多在產生變數 ua 的匿名函式裡,整理出來約這樣:

function isFlashSupported() {
  if(window.ActiveXObject) {
    try {
      if(new ActiveXObject('ShockwaveFlash.ShockwaveFlash'))
         return true;
    } catch(e) { }
  }
    
  return navigator.plugins['Shockwave Flash'] ? true : false;
}

目前測過 IE 7 、 IE 8 、 IE 9 、 Metro IE 10 、 Desktop IE 10 、 Chrome 、 Firefox 、 Opera 、 Safari 、 iPhone Safari 、 iPad Safari 、 Android 4.0 Browser ,持續測試中。

延伸 利用自我執行 anonymous function 避免重覆運算
回應
Google 站內搜尋
BloggerAds
累積 | 今日
loading......
    沒有新回應!





Powered by Xuite