flash在chrome中的狀態檢測

前前言

chrome 更新太快了,文章的內容已過時!
chrome 更新太快了,文章的內容已過時!
chrome 更新太快了,文章的內容已過時!chrome

前言

隨着chrome的更新,以前的一些依賴flash的代碼邏輯可能再也不準確了。最近作了一些測試,總結一下。瀏覽器

測試時間:2016年12月。測試版本:win chrome 55。測試

正文

代碼中,可能有一些功能是須要flash支持的,可能同時選用了其餘技術,這時候就就要寫一些邏輯去判斷flash的狀態,以便選擇技術實現。spa

以目前的瞭解,能夠把flash在chrome中的狀態分紅4種:插件

  • 未安裝code

  • 已安裝被停用對象

  • 已安裝已啓用未容許(當前域使用flash)ip

  • 已安裝已啓用已容許flash

是否停用指的是chrome://plugins中設置是否停用flash:it

clipboard.png

是否容許指的是右上角出現阻斷提示時的隨手設置,或在chrome://settings/content中的Flash設置:

clipboard.png

clipboard.png

下面來分析下這4種狀態。

1. 未安裝

通常使用navigator.plugins["Shockwave Flash"]檢測chrome中flash安裝的狀況,奇怪的是,目前即便沒有安裝flash,這段代碼仍然能夠檢測到flash信息。

經查閱資料和驗證,未安裝flash的chrome中查看chrome://plugins插件信息,雖然有Adobe Flash Player的信息,但「位置」一項顯示的是「internal-not-yet-present」:

clipboard.png

而正常安裝flash時:

clipboard.png

二者代碼的區別是這樣的:

clipboard.pngclipboard.png

因此能夠經過filename這個屬性來檢測是否安裝了flash。

2. 已安裝被停用

flash被停用時,navigator.plugins["Shockwave Flash"]沒法檢測到flash信息:
clipboard.png

因此這種狀態很輕鬆就能夠判斷。

3. 已安裝已啓用未容許

這種狀態的問題在於,瀏覽器確實安裝了flash,navigator.plugins["Shockwave Flash"]也能夠檢測到安裝了flash。而當前頁面卻不容許使用flash(chrome的限制策略)。

這種狀態沒法從navigator.plugins中檢測,由於結果沒有任何異樣。

但由於瀏覽器限制了flash,因此flash對象是沒法成功建立的。能夠設置定時器不斷查詢有沒有建立成功,而後設置一個超時次數,好比50次,若是尚未建立成功的話,能夠認爲是建立超時,標明這種狀態。

暫時沒有想到更好的判斷方法。

不過檢測這種狀態頗有意義。用戶是已經安裝了flash的。只是未容許flash運行,這時候能夠簡單提示用戶設置容許運行就能夠。通常chrome攔截時,右上角會有攔截設置:

clipboard.png

4. 已安裝已啓用已容許

這種狀態一切正常,能夠正常使用flash。上文已經提到,插件對象的filename字段會顯示真正的文件名:

clipboard.png

補充

不過flash最終是要被取代的技術。保證flash相關代碼穩定的同時,也要調研替代技術啦。

相關文章
相關標籤/搜索