在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ 是否有可能,不透過 user agent,知道用戶使用的瀏覽器信息

是否有可能,不透過 user agent,知道用戶使用的瀏覽器信息

最近和瀏覽器版本杠上了。

簡單的來說,就是我想要知道用戶使用的瀏覽器的版本,如果與我們預(yù)期的版本不符,則提示用戶升級或跟換瀏覽器

這里的行為就有點(diǎn)像知乎、阿里巴巴等網(wǎng)站的做法,直接上圖

9f510fb30f2442a73f313088db43ad4bd11302e4.jpg

首先我提的方案是透通過 JavaScript 獲取 user agent 字符串中的內(nèi)容來檢測用戶使用的瀏覽器版本

圖片描述

如上圖,我就可以根據(jù)這個(gè)字符串中是否存在“FireFox”來判斷它是否是 FireFox 瀏覽器,并根據(jù)后面的數(shù)字得到版本。

但是 user agent 有個(gè)致命的問題,它可以修改,且各個(gè)版本的 user agent 內(nèi)容是不一樣的,就算在某個(gè)版本區(qū)間內(nèi)可以保證它的一致性,但是不能保證以后的都會一致,況且現(xiàn)在的瀏覽器更新速度越來越快了。

更何況國內(nèi)瀏覽器“魚龍混雜”,user agent 的判斷邏輯可以說很難。(知乎的相關(guān)功能已被無數(shù)人吐槽)

所以想問大佬們

是否有其他的辦法知道瀏覽器的版本。

不勝感激!

回答
編輯回答
玄鳥

UA允許修改且瀏覽器魚龍混雜,這是一個(gè)目前大家都很頭疼但是都很無奈的問題。

2017年6月21日 11:55
編輯回答
有點(diǎn)壞

只能用UA,同時(shí)瀏覽器的版本信息允許被修改,可欺騙性比較強(qiáng)。

這是我常用的獲取瀏覽器信息的代碼,你可以參考一下:

navigator.sayswho= (function(){

var ua= navigator.userAgent, tem, 
M= ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
if(/trident/i.test(M[1])){
    tem=  /\brv[ :]+(\d+)/g.exec(ua) || [];
    return 'IE '+(tem[1] || '');
}
if(M[1]=== 'Chrome'){
    tem= ua.match(/\b(OPR|Edge)\/(\d+)/);
    if(tem!= null) return tem.slice(1).join(' ').replace('OPR', 'Opera');
}
M= M[2]? [M[1], M[2]]: [navigator.appName, navigator.appVersion, '-?'];
if((tem= ua.match(/version\/(\d+)/i))!= null) M.splice(1, 1, tem[1]);
return M.join(' ');

})();

console.log(navigator.sayswho);

2017年1月12日 21:38
編輯回答
鹿惑

只能通過UA,不過要精確到瀏覽器的版本,這個(gè)是否有必要,就需要思考了。
如果是為了考慮兼容,那么從產(chǎn)品經(jīng)理的角度出發(fā),設(shè)定最低瀏覽器支持要求,代碼樣式也依照最低要求來編寫,不就可以了嗎?
再或者,針對再舊的瀏覽器用戶,可以專門開設(shè)一個(gè)閹割的版本,能使用基本功能,但是體驗(yàn)沒有標(biāo)準(zhǔn)版好,比如gmail。

2017年12月15日 00:08
編輯回答
陌南塵

我覺得可以換一個(gè)思路,低版本瀏覽器主要在于不支持某些 HTML5 特性,所以題主想提示這些瀏覽器進(jìn)行版本升級。題主可以通過測試瀏覽器是否支持對應(yīng)的 API 來判斷該瀏覽器是否需要更新,這個(gè)目前已經(jīng)有現(xiàn)成的類庫進(jìn)行封裝了。 https://modernizr.com/

2018年5月21日 23:37
編輯回答
只愛你

根據(jù)UA來判斷瀏覽器,只能接受UA會被修改的情況,這是沒有辦法改變的。
不過,某些情況下可以確定瀏覽器版本區(qū)間,比如IE5和IE6是沒有XMLHttpRequest對象的,檢測用戶瀏覽器是否版本大于IE6可以使用if(window.XMLHttpRequest)語句進(jìn)行判斷。
我想,就算能修改IE的UA,也沒辦法憑空造一個(gè)不存在的XMLHttpRequest對象來吧。

2017年4月9日 03:32
編輯回答
老梗

沒有。
進(jìn)一步說,別人用的什么,跟你沒關(guān)系。是否想讓你知道,也只是別人想或者不想的事。

2017年8月9日 23:42