日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

js浏览器和浏览器插件检测的方法总结

發(fā)布時(shí)間:2025/6/15 HTML 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 js浏览器和浏览器插件检测的方法总结 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文/玄魂

前言

首次面對題目所示的需求的時(shí)候,頭腦中沒有任何概念,于是搜索,所有的中文結(jié)果都不是很滿意。所幸老外的幾篇文章還是很有參考價(jià)值,雖然最終沒有解決我的問題,但是我還是把這幾篇文章的內(nèi)容作了抽取和整理,于是有了本文。主要內(nèi)容如下:

1.1??瀏覽器檢測

1.2??瀏覽器插件檢測

1.1??瀏覽器檢測

?

(參考:http://www.quirksmode.org/js/detect.html)

對于瀏覽器的類型和版本的檢測,通常我們使用navigator.userAgent屬性,但是它不能適用于所有的瀏覽器,有時(shí)還需要使用navigator.vendor、window.opera或者navigator.appVersion屬性。這兩個(gè)屬性這里不做詳細(xì)的說明,我們先看下面的一段代碼:

var BrowserDetect = {

??? init: function () {

?????????? this.browser = this.searchString(this.dataBrowser) || "An unknown browser";

?????????? this.version = this.searchVersion(navigator.userAgent)

????????????????? || this.searchVersion(navigator.appVersion)

????????????????? || "an unknown version";

?????????? this.OS = this.searchString(this.dataOS) || "an unknown OS";

??? },

??? searchString: function (data) {

?????????? for (var i=0;i<data.length;i++)?? {

????????????????? var dataString = data[i].string;

????????????????? var dataProp = data[i].prop;

????????????????? this.versionSearchString = data[i].versionSearch || data[i].identity;

????????????????? if (dataString) {

??????????????????????? if (dataString.indexOf(data[i].subString) != -1)

?????????????????????????????? return data[i].identity;

????????????????? }

????????????????? else if (dataProp)

??????????????????????? return data[i].identity;

?????????? }

??? },

??? searchVersion: function (dataString) {

?????????? var index = dataString.indexOf(this.versionSearchString);

?????????? if (index == -1) return;

?????????? return parseFloat(dataString.substring(index+this.versionSearchString.length+1));

??? },

??? dataBrowser: [{

????????????????? string: navigator.userAgent,

????????????????? subString: "Chrome",

????????????????? identity: "Chrome"

?????????? },

{

????????????????? prop: window.opera,

????????????????? identity: "Opera",

????????????????? versionSearch: "Version"

?????????? },

(略。。。)

]

};

名為dataBrowser的數(shù)組是我們需要檢測的瀏覽器對象,每個(gè)對象包含多個(gè)屬性用來幫助代碼從navigator.userAgent或者window.opera或者navigator.vendor屬性中提前瀏覽器類別和版本信息。每個(gè)對象包含的屬性說明如下:

1)?????????stringsubString。告訴程序在string屬性中搜索subString的內(nèi)容,從而確定瀏覽器類型。

2)?????????prop。使用window.opera來判斷瀏覽器類型。

3)?????????identity。瀏覽器類型標(biāo)識字符串。

4)?????????versionSearch。用來檢測瀏覽器版本的值,如果沒有該值,使用identity屬性替代。

完整代碼如下(更多解釋內(nèi)容,可參考我給出的英文鏈接):

var BrowserDetect = {

?????? init: function () {

????????????? this.browser = this.searchString(this.dataBrowser) || "An unknown browser";

????????????? this.version = this.searchVersion(navigator.userAgent)

??????????????????? || this.searchVersion(navigator.appVersion)

??????????????????? || "an unknown version";

????????????? this.OS = this.searchString(this.dataOS) || "an unknown OS";

?????? },

?????? searchString: function (data) {

????????????? for (var i=0;i<data.length;i++)?? {

??????????????????? var dataString = data[i].string;

??????????????????? var dataProp = data[i].prop;

??????????????????? this.versionSearchString = data[i].versionSearch || data[i].identity;

??????????????????? if (dataString) {

?????????????????????????? if (dataString.indexOf(data[i].subString) != -1)

????????????????????????????????? return data[i].identity;

??????????????????? }

??????????????????? else if (dataProp)

?????????????????????????? return data[i].identity;

????????????? }

?????? },

?????? searchVersion: function (dataString) {

????????????? var index = dataString.indexOf(this.versionSearchString);

????????????? if (index == -1) return;

????????????? return parseFloat(dataString.substring(index+this.versionSearchString.length+1));

?????? },

?????? dataBrowser: [

????????????? {

??????????????????? string: navigator.userAgent,

??????????????????? subString: "Chrome",

??????????????????? identity: "Chrome"

????????????? },

????????????? { ???? string: navigator.userAgent,

??????????????????? subString: "OmniWeb",

??????????????????? versionSearch: "OmniWeb/",

??????????????????? identity: "OmniWeb"

????????????? },

????????????? {

??????????????????? string: navigator.vendor,

??????????????????? subString: "Apple",

??????????????????? identity: "Safari",

??????????????????? versionSearch: "Version"

????????????? },

????????????? {

?????? ????????????? prop: window.opera,

??????????????????? identity: "Opera",

??????????????????? versionSearch: "Version"

????????????? },

????????????? {

??????????????????? string: navigator.vendor,

??????????????????? subString: "iCab",

??????????????????? identity: "iCab"

????????????? },

????????????? {

??????????????????? string: navigator.vendor,

??????????????????? subString: "KDE",

??????????????????? identity: "Konqueror"

????????????? },

????????????? {

??????????????????? string: navigator.userAgent,

??????????????????? subString: "Firefox",

??????????????????? identity: "Firefox"

????????????? },

????????????? {

??????????????????? string: navigator.vendor,

??????????????????? subString: "Camino",

??????????????????? identity: "Camino"

????????????? },

????????????? {???????????? // for newer Netscapes (6+)

??????????????????? string: navigator.userAgent,

??????????????????? subString: "Netscape",

??????????????????? identity: "Netscape"

????????????? },

????????????? {

??????????????????? string: navigator.userAgent,

??????????????????? subString: "MSIE",

??????????????????? identity: "Explorer",

??????????????????? versionSearch: "MSIE"

????????????? },

????????????? {

??????????????????? string: navigator.userAgent,

??????????????????? subString: "Gecko",

??????????????????? identity: "Mozilla",

??????????????????? versionSearch: "rv"

????????????? },

????????????? { ??????????? // for older Netscapes (4-)

??????????????????? string: navigator.userAgent,

??????????????????? subString: "Mozilla",

??????????????????? identity: "Netscape",

??????????????????? versionSearch: "Mozilla"

????????????? }

?????? ],

?????? dataOS : [

????????????? {

??????????????????? string: navigator.platform,

??????????????????? subString: "Win",

??????????????????? identity: "Windows"

????????????? },

????????????? {

??????????????????? string: navigator.platform,

??????????????????? subString: "Mac",

??????????????????? identity: "Mac"

????????????? },

????????????? {

??????????????????? ?? string: navigator.userAgent,

??????????????????? ?? subString: "iPhone",

??????????????????? ?? identity: "iPhone/iPod"

?????? ??? },

????????????? {

??????????????????? string: navigator.platform,

??????????????????? subString: "Linux",

??????????????????? identity: "Linux"

????????????? }

?????? ]

?

};

BrowserDetect.init();

?

1.2??瀏覽器插件檢測

主要參考文章:http://www.matthewratzloff.com/blog/2007/06/26/detecting-plugins-in-internet-explorer-and-a-few-hints-for-all-the-others/

對于瀏覽器插件的檢測,情況要略微復(fù)雜,包括插件是否安裝和插件版本的檢測,本文只討論IE、Firefox和Chrome瀏覽器。在IE瀏覽器中,插件是作為ActiveXObject存在的,必須創(chuàng)建ActiveXObject對象才能檢測插件是否安裝;在Firefox和Chrome中,可以使用navigator.plugins屬性來枚舉安裝的插件。對于插件的版本檢測,在IE中,可以使用對應(yīng)的ActiveXObject對象的GetVersions()方法來獲取版本信息;在Firefox中,navigator.plugins['插件標(biāo)識'].version的方法來獲取版本;在Chrome中,卻沒有統(tǒng)一的方法來獲取插件版本,有的插件根本無法獲取版本信息。

下面是獲取瀏覽器Pdf插件版本信息的代碼:

var?PdfDetect?=?{

????GetInfo:?function?(explorerName)?{

????????this.pdfVersion?=?this.searchPdf(explorerName);

????},

????searchPdf:?function?(explorerName)?{

????????explorerName?=?explorerName.toLowerCase();

????????if?(explorerName?!=?'explorer'?&&?navigator.plugins.length?>?0)?{

????????????var?version?=?0;

????????????if?(navigator.plugins['Adobe?Acrobat']?||?navigator.plugins['Adobe?PDF?Plug-in'])?{

????????????????if?(explorerName?==?'chrome')?{

????????????????????//??version?=?navigator.plugins[i].name.match(/([\d.]+)/)?+?"<br?/>"

????????????????????version?=?8;?//chrome瀏覽器無法有效檢測pdf版本

????????????????}

????????????????else?{

????????????????????version?=?navigator.plugins['Adobe?PDF?Plug-in']???

????????????????????navigator.plugins['Adobe?Acrobat'].version?:?

????????????????????navigator.plugins['Adobe?Acrobat'].version;

????????????????}

????????????}

????????????return?version;

????????}

????????else?{

????????????var?contol?=?null;

????????????try?{

?

????????????????//?AcroPDF.PDF?is?used?by?version?7?and?later

????????????????control?=?new?ActiveXObject('AcroPDF.PDF');

????????????}?catch?(e)?{

????????????????return?0;

????????????}

????????????if?(!control)?{

????????????????try?{

????????????????????//?PDF.PdfCtrl?is?used?by?version?6?and?earlier

????????????????????control?=?new?ActiveXObject('PDF.PdfCtrl');

????????????????}?catch?(e)?{

????????????????????return?0;

????????????????}

????????????}

????????????if?(control)?{

????????????????isInstalled?=?true;

????????????????version?=?control.GetVersions().split(',');

????????????????version?=?version[0].split('=');

????????????????version?=?parseFloat(version[1]);

????????????????return?version;

????????????}

????????????return?0;

????????}

????}

在上面的代碼中,我們可以看到,在IE6和早期版本的瀏覽器中使用control = new ActiveXObject('PDF.PdfCtrl')來創(chuàng)建Pdf插件對象,在更新版本的IE瀏覽器中使用control?=?new?ActiveXObject('AcroPDF.PDF')來創(chuàng)建Pdf對象,然后使用

version?=?control.GetVersions().split(',');

????????????????version?=?version[0].split('=');

????????????????version?=?parseFloat(version[1]);

來獲取Pdf版本。在Firefox和Chrome中,使用navigator.plugins['Adobe?Acrobat']?||?navigator.plugins['Adobe?PDF?Plug-in']來判斷是否安裝了Pdf插件。在Firefox中,使用

version?=?navigator.plugins['Adobe?PDF?Plug-in']???

????????????????????navigator.plugins['Adobe?Acrobat'].version?:?

????????????????????navigator.plugins['Adobe?Acrobat'].version;

來檢測Pdf插件的版本信息。

在chrome中,我沒有檢測Pdf插件的版本。

檢測Flash Player插件的代碼如下:

var isInstalled = false;
var version = null;
if (window.ActiveXObject) {
var control = null;
try {
control = new ActiveXObject('ShockwaveFlash.ShockwaveFlash');
} catch (e) {
return;
}
if (control) {
isInstalled = true;
version = control.GetVariable('$version').substring(4);
version = version.split(',');
version = parseFloat(version[0] + '.' + version[1]);
}
} else {
//在Firefox和Chrome中使用navigator.plugins["Shockwave Flash"]檢測//Flash Player。}

其他插件的檢測,參考我給出的英文鏈接。

總結(jié)

以上是生活随笔為你收集整理的js浏览器和浏览器插件检测的方法总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 美女福利视频导航 | 久久草av| 欧美放荡办公室videos4k | 精品毛片在线观看 | 瑟瑟av | 九九久久综合 | 性欧美在线视频观看 | 国产一区二区免费 | 国产视频播放 | 国产一区二区视频免费在线观看 | 欧美日本色图 | 男生女生插插插 | 黑人糟蹋人妻hd中文字幕 | 欧美日韩黄色一区二区 | 国产成人在线视频网站 | 欧美123区| 成人久久久久久 | 一区二区三区 欧美 | 亚洲v欧美 | 国产精品xxx在线观看www | 波多野结衣高清视频 | 亚洲mv一区| 青青成人网| 午夜一二区 | 国语对白一区二区 | 波多野吉衣一二三区乱码 | 欧美丝袜一区二区三区 | 欧美久久一区 | 婷婷丁香综合 | 欧美一级免费视频 | 国产精品99久久久久久www | 久久咪咪| 美女扒开屁股让男人桶 | 久久国产精品综合 | 在线步兵区 | 久久久久久久久艹 | 夜夜综合| 尤物视频在线观看国产性感 | 午夜黄色 | 韩国午夜av| 无码人中文字幕 | 私人网站 | 国产经典久久久 | 91桃色在线| 自拍偷拍在线视频 | 自拍偷拍福利视频 | 狠狠操av| 国产免费a视频 | 五月激情天 | 日韩av动漫 | 成人在线手机视频 | 免费一级全黄少妇性色生活片 | 26uuu国产精品视频 | 国产成人久久精品 | 九九99视频 | 日本黄色的视频 | 99热亚洲精品 | 人人干人人做 | 黄色片在线免费观看视频 | 鲁一鲁在线视频 | 国产成人无码精品久久久性色 | 奇米影视在线观看 | 欧美20p | 亚洲tv在线观看 | 欧美片一区二区三区 | 偷偷操av| 欧美日本综合 | 一级久久久 | 国产精品国产三级国产传播 | 四虎影院一区 | 亚洲av无码不卡 | 国模一区二区三区 | 午夜影院a | 黄色网免费看 | 免费成人在线观看动漫 | 久久精品人人做人人爽 | 亚洲.www| 在线日韩成人 | 无码av免费毛片一区二区 | 日韩欧美在线免费观看 | 久久久一区二区三区 | 老司机午夜av | 亚洲国产精品一区二区三区 | 欧美视频亚洲 | 久久无码高潮喷水 | 天天综合日韩 | 韩国毛片一区二区三区 | 自拍偷拍国产精品 | 97se在线视频 | 亚洲av成人一区二区国产精品 | 日韩成人高清 | 一区二区精品国产 | 国内精久久久久久久久久人 | 天堂一级片| 欧美性受xxxx黑人xyx | av男人天堂av | 午夜tv| 91久久精品国产91久久性色tv | 777久久久精品一区二区三区 |