웹 프론트엔드 JS 튜토리얼 user_javascript 기술에서 사용하는 브라우저를 감지하기 위해 JavaScript로 작성된 코드의 예

user_javascript 기술에서 사용하는 브라우저를 감지하기 위해 JavaScript로 작성된 코드의 예

May 16, 2016 pm 03:01 PM
javascript js 발각 브라우저

能力检测
在编写代码之前先检测特定浏览器的能力。例如,脚本在调用某个函数之前,可能要先检测该函数首付存在。这种检测方法将开发人员从考虑具体的浏览器类型和版本中解放出来,让他们把注意力集中到相应的能力是否存在上。能力检测无法精确地检测特定的浏览器和版本。

怪癖检测
怪癖实际上是浏览器实现中存在的bug,例如早期的webkit中就存在一个怪癖,即它会再for-in循环中返回被隐藏的属性。怪癖检测通常涉及到运行一段代码,然后确定浏览器是否存在某个怪癖。由于怪癖检测无法精确地检测特定的浏览器和版本。

用户代理检测
通过检测用户代理字符串来识别浏览器。用户代理字符串中包含大量与浏览器有关的信息,包括浏览器、平台、操作系统及浏览器版本。用户代理字符串有过一段相当长的发展历史,在此期间,浏览器提供商视图通过在用户代理字符串总添加一些欺骗性信息,欺骗网站详细自己的浏览器是另外一种浏览器。用户代理检测需要特殊的技巧,特别是要注意Opera会隐瞒其用户代理字符串的情况。即便如此,通过用户代理字符串仍然能够检测出浏览器所用的呈现引擎以及所在的平台,包括移动设备和游戏系统。

在每一次HTTP请求过程中,用户代理字符串是作为响应首部发送的,而且该字符串可以通过Javascript的navigator.userAgent属性访问。在服务器端,通过检测用户代理字符串来确定用户使用的浏览器是一种常用而且广为接受的做法。而在客户端,用户代理检测一般被当作一种万不得已的做法,其优先级排在能力检测和怪癖检测之后。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

var client = function(){

 // 呈现引擎

 var engine = {

  ie:0,

  gecko:0,

  webkit:0,

  khtml:0,

  opera:0,

 

  // 完整的版本号

  ver:null

 };

 

 // 浏览器

 var browser = {

  // 主要浏览器

  ie:0,

  firefox:0,

  safari:0,

  konq:0,

  opera:0,

  chrome:0,

 

  // 具体的版本号

  ver:null

 };

 

 // 检测呈现引擎和浏览器

 var ua = navigator.userAgent;

 if (window.opera) {

  engine.ver = browser.ver = window.opera.version();

  engine.opera = browser.opera = parseFloat(engine.ver);

 } else if (/AppleWebKit\/(\S+)/.test(ua)) {

  engine.ver = RegExp["$1"];

  engine.webkit = parseFloat(engine.ver);

 

  // 确定是Chrome还是Safari

  if (/Chrome\/(\S+)/.test(ua)) {

   browser.ver = RegExp["$1"];

   browser.chrome = parseFloat(engine.ver);

  } else if (/Version\/(S+)/.test(ua)) {

   browser.ver = RegExp["$1"];

   browser.safari = parseFloat(browser.ver);

  } else {

 

   // 近似地确定版本号

   var safariVersion = 1;

   if (engine.Webkit <100) {

    safariVersion = 1;

   } else if (engine.webkit < 312) {

    safariVersion = 1.2;

   } else if (engine.webkit < 412) {

    safariVersion = 1.3;

   } else {

    safariVersion = 2;

   }

 

   browser.safari = browser.ver = safariVersion;

  }

 } else if (/KHTML\/(S+)/.test(ua) || /Konqueror\/([^;]+)/.test(ua)) {

  engine.ver = browser.ver = RegExp["$1"];

  engine.khtml = browser.kong = parseFloat(engine.ver);

 } else if (/rv:([^\)]+)\) Gecko\/\d{8}/.test(ua)){

  engine.ver = RegExp["$1"];

  engine.gecko = parseFloat(engine.ver);

 

  // 确定是不是firefox

  if (/Firefox\/(S+)/.test(ua)) {

   browser.ver = RegExp["$1"];

   browser.firefox = parseFloat(browser.ver);

  }

 } else if (/MSIE ([^;]+)/.test(ua)) {

  engine.ver = browser.ver = RegExp["$1"];

  engine.ie = browser.ie = parseFloat(engine.ver);

 

 }

 

 // 检测浏览器

 browser.ie = engine.ie;

 browser.opera = engine.opera;

 

 // 返回这些对象

 return {

  engine:engine,

  browser: browser

 }

}();

 

console.log(client.engine);

console.log(client.browser);

로그인 후 복사

Tangram 检测浏览器源码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

/**

 * 声明baidu包

 */

var baidu = baidu || {version: "1-3-2"}; // meizz 20100513 将 guid 升级成 \x06

baidu.guid = "$BAIDU$";//提出guid,防止修改window[undefined] 20100504 berg

 

/**

 * meizz 2010/02/04

 * 顶级域名 baidu 有可能被闭包劫持,而需要页面级唯一信息时需要用到下面这个对象

 */

 

window[baidu.guid] = window[baidu.guid] || {};

 

/**

 * 声明baidu.browser包

 */

baidu.browser = baidu.browser || {};

 

/**

 * 判断是否为isGecko

 */

baidu.browser.isGecko = /gecko/i.test(navigator.userAgent) && !/like gecko/i.test(navigator.userAgent);

 

/**

 * 判断是否为isWebkit

 */

baidu.browser.isWebkit = /webkit/i.test(navigator.userAgent);

 

/**

 * 判断是否为标准模式

 */

baidu.browser.isStrict = document.compatMode == "CSS1Compat";

 

/**

 * 判断是否为safari浏览器

 */

if ((/(\d+\.\d)(\.\d)&#63;\s+safari/i.test(navigator.userAgent) && !/chrome/i.test(navigator.userAgent))) {

 baidu.browser.safari = parseFloat(RegExp['\x241']);

}

 

/**

 * 判断是否为opera浏览器

 */

if (/opera\/(\d+\.\d)/i.test(navigator.userAgent)) {

 baidu.browser.opera = parseFloat(RegExp['\x241']);

}

 

/**

 * 判断是否为chrome浏览器

 */

if (/chrome\/(\d+\.\d)/i.test(navigator.userAgent)) {

 baidu.browser.chrome = parseFloat(RegExp['\x241']);

}

 

/**

 * 判断是否为ie浏览器

 */

if (/msie (\d+\.\d)/i.test(navigator.userAgent)) {

 baidu.ie = baidu.browser.ie = document.documentMode || parseFloat(RegExp['\x241']);

}

 

/**

 * 判断是否为firefox浏览器

 */

if (/firefox\/(\d+\.\d)/i.test(navigator.userAgent)) {

 baidu.browser.firefox = parseFloat(RegExp['\x241']);

 // '\x241' 是八进制表示法 '\x24' 对应字符 '$' ,所以 '\x241' 等同于 '$1'

}

로그인 후 복사

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

CSS를 통해 크기 조정 기호를 사용자 정의하고 배경색으로 균일하게 만드는 방법은 무엇입니까? CSS를 통해 크기 조정 기호를 사용자 정의하고 배경색으로 균일하게 만드는 방법은 무엇입니까? Apr 05, 2025 pm 02:30 PM

CSS에서 크기 조정 기호를 사용자 정의하는 방법은 배경색으로 통합됩니다. 매일 개발에서, 우리는 종종 조정과 같은 사용자 인터페이스 세부 정보를 사용자 정의 해야하는 상황을 발생시킵니다.

웹 페이지에 로컬로 설치된 'Jingnan Mai Round Body'를 올바르게 표시하는 방법은 무엇입니까? 웹 페이지에 로컬로 설치된 'Jingnan Mai Round Body'를 올바르게 표시하는 방법은 무엇입니까? Apr 05, 2025 pm 10:33 PM

최근 웹 페이지에 로컬로 설치된 글꼴 파일을 사용하여 인터넷에서 무료 글꼴을 다운로드하여 시스템에 성공적으로 설치했습니다. 지금...

Safari의 로컬 웹 페이지에서 맞춤형 스타일 시트가 적용되지만 Baidu 페이지에서는 그렇지 않은 이유는 무엇입니까? Safari의 로컬 웹 페이지에서 맞춤형 스타일 시트가 적용되지만 Baidu 페이지에서는 그렇지 않은 이유는 무엇입니까? Apr 05, 2025 pm 05:15 PM

Safari에서 사용자 정의 스타일 시트 사용에 대한 토론 오늘 우리는 Safari 브라우저에 대한 사용자 정의 스타일 시트 적용에 대한 질문에 대해 논의 할 것입니다. 프론트 엔드 초보자 ...

플렉스 레이아웃 아래의 텍스트는 생략되지만 컨테이너가 열려 있습니까? 그것을 해결하는 방법? 플렉스 레이아웃 아래의 텍스트는 생략되지만 컨테이너가 열려 있습니까? 그것을 해결하는 방법? Apr 05, 2025 pm 11:00 PM

Flex 레이아웃 및 솔루션에서 텍스트를 과도하게 누락하여 컨테이너 개구부 문제가 사용됩니다 ...

Edge 브라우저의 특정 DIV 요소가 표시되지 않는 이유는 무엇입니까? 이 문제를 해결하는 방법? Edge 브라우저의 특정 DIV 요소가 표시되지 않는 이유는 무엇입니까? 이 문제를 해결하는 방법? Apr 05, 2025 pm 08:21 PM

사용자 에이전트 스타일 시트로 인한 디스플레이 문제를 해결하는 방법은 무엇입니까? 에지 브라우저를 사용하는 경우 프로젝트의 DIV 요소를 표시 할 수 없습니다. 확인 후 게시했습니다 ...

부정적인 마진이 어떤 경우에는 적용되지 않는 이유는 무엇입니까? 이 문제를 해결하는 방법? 부정적인 마진이 어떤 경우에는 적용되지 않는 이유는 무엇입니까? 이 문제를 해결하는 방법? Apr 05, 2025 pm 10:18 PM

어떤 경우에는 부정적인 마진이 적용되지 않는 이유는 무엇입니까? 프로그래밍 중에 CSS의 부정적인 마진 (음수 ...

JavaScript 또는 CSS를 통해 브라우저 인쇄 설정에서 페이지 상단 및 끝을 제어하는 ​​방법은 무엇입니까? JavaScript 또는 CSS를 통해 브라우저 인쇄 설정에서 페이지 상단 및 끝을 제어하는 ​​방법은 무엇입니까? Apr 05, 2025 pm 10:39 PM

브라우저의 인쇄 설정에서 페이지의 상단과 끝을 제어하기 위해 JavaScript 또는 CSS를 사용하는 방법. 브라우저의 인쇄 설정에는 디스플레이가 ...인지 제어 할 수있는 옵션이 있습니다.

웹 페이지에서 로컬로 설치된 글꼴 파일을 사용하는 방법은 무엇입니까? 웹 페이지에서 로컬로 설치된 글꼴 파일을 사용하는 방법은 무엇입니까? Apr 05, 2025 pm 10:57 PM

웹 페이지에서 로컬로 설치된 글꼴 파일을 사용하는 방법 웹 페이지 개발 에서이 상황이 발생 했습니까? 컴퓨터에 글꼴을 설치했습니다 ...

See all articles