2015-03-24 71 views
1

因此,對於那些在iOS網絡應用程序工作的人可能知道,由於蘋果的政策,Chrome和iOS上的其他移動瀏覽器使用了非常古老的JavaScript引擎。這就是爲什麼我們需要停用Chrome的某些渲染功能以及其他適用於iOS的非Safari瀏覽器。有沒有辦法在過濾掉iOS瀏覽器,Firefox和其他瀏覽器的同時檢測iOS Safari?

我一直在閱讀this question,那裏沒有有用的答案。這裏是我的一些方法(失敗):

使用is_iOS = navigator.userAgent.match(/(iPad|iPhone|iPod)/g)來檢測瀏覽器是否在iOS上。然後使用:

is_FF = navigator.userAgent.match(/(firefox)/g)is_Chrome = navigator.userAgent.match(/(chrome)/g)

殺死那些Firefox和Chrome瀏覽器。

然後我意識到所有瀏覽器都與iOS Safari共享相同的用戶代理字符串。所以我想這個方法應該運行一個只有Safari才能運行的javascript函數,然後確定瀏覽器是否是Safari。

+0

可能我建議基於功能而不是'userAgent'進行過濾?例如:'if(window.localStorage).....'。 – 2015-03-24 21:11:17

+1

@blex我意識到所有瀏覽器與iOS Safari共享相同的用戶代理字符串。所以我想這個方法應該運行一個只有Safari才能運行的javascript函數,然後確定瀏覽器是否是Safari。 – 2015-03-24 21:12:36

+1

@KJPrice請詳細解釋。這似乎是正確的解決方案。謝謝。 – 2015-03-24 21:13:07

回答

0

因此,選擇在瀏覽器中工作時應使用哪種本機功能有兩種思路。其中一種思路是檢查userAgent,因爲您正在此處執行操作,並使用/刪除基於userAgent的功能。

檢查userAgent的問題在於它變得非常複雜。你已經遇到了一個有趣的問題,但是當你發現ie8沒有你正在尋找的功能時會發生什麼?

更好的解決方案可能是檢查功能是否存在於當前上下文中,而不必擔心userAgent。一個很好的例子是新的HTML5 audio元素。基於browser support,我們可以看出它不存在於ie8中,也不存在於Safari中。而不是檢查瀏覽器是否與此處提及的瀏覽器相匹配,您可以檢查是否存在功能。我們知道audio元素是Audio類的一個實例。我們可以簡單地檢查:

if (window.Audio) { 
    //load and play the HTML5 audio element here 
} 

這比檢查userAgent簡單得多。

+0

這絕對是一個好主意!我嘗試使用'window.localStorage'作爲檢測器,不幸的是Safari和Chrome都返回了'true'。 – 2015-03-24 21:51:02

+0

那麼'localStorage'適用於這些瀏覽器。你說的你在這裏說的「我們需要禁用一些Chrome的渲染」,你需要禁用什麼? – 2015-03-24 21:54:25

+0

在我的例子中,我創建了一個JavaScript渲染引擎,可以在頁面上直接運行視頻作爲背景(而不是調用視頻播放器),但非Safari瀏覽器的幀率非常低。 – 2015-03-24 21:58:37

相關問題