JS에서 모든 Firefox 버전 검색
JavaScript에서 Firefox를 탐지하는 방법은 무엇입니까?
파이어폭스의 모든 버전을 탐지하고 싶습니다.
그러면 Firefox의 모든 버전이 검색됩니다.
var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;
보다 구체적으로:
if(navigator.userAgent.toLowerCase().indexOf('firefox') > -1){
// Do Firefox-related activities
}
필요한 작업을 수행하기 위해 Modernizr 또는 관련 도구를 사용하는 것을 고려해 볼 수 있습니다.
FireFox의 숫자 버전이 무엇인지 알고 싶다면 다음 스니펫을 사용할 수 있습니다.
var match = window.navigator.userAgent.match(/Firefox\/([0-9]+)\./);
var ver = match ? parseInt(match[1]) : 0;
오랫동안 저는 다음과 같은 대안을 사용해 왔습니다.
('netscape' in window) && / rv:/.test(navigator.userAgent)
사용자 에이전트 문자열을 신뢰하지 않기 때문입니다.일부 버그는 기능 탐지를 사용하여 탐지할 수 없으므로 일부 해결 방법을 사용하려면 브라우저를 탐지해야 합니다.
또한 Gecko에서 버그를 해결하는 경우 버그는 Firefox의 파생물에도 있을 수 있으며 이 코드는 파생물과도 함께 작동해야 합니다(Waterfox와 Pale Moon은 사용자 에이전트 문자열에 'Firefox'가 있습니까?).
이 스크립트는 데스크톱의 경우 버전 1부터 46까지 모든 버전의 Firefox를 검색합니다.
StackOverflow에서 이 질문에 대한 답을 세 번째 시도한 것은 스크립트를 중단할 수 있는 새로운 방법을 계속 찾았기 때문입니다.하지만, 지금은 효과가 있다고 생각합니다.파이어폭스의 기능에 대해 배울 수 있고 사물이 어떻게 진화했는지 볼 수 있는 흥미로운 연습입니다.스크립트는 다른 기능으로 다시 작성할 수 있습니다. 저는 가장 유용할 것으로 생각되는 것을 선택했습니다. 다른 사람이 더 유용한 기능으로 다시 작성하여 여기에 게시하고 결과를 비교했으면 합니다.
사용자가 about.config에 비활성화된 설정이 있을 경우를 대비하여 스크립트를 try 문에 배치했습니다.그렇지 않으면 모든 버전의 Firefox에서 테스트를 수행했는데 각 버전이 감지됩니다.각 기능이 무엇에 사용되는지 간략하게 설명했습니다.저도 웹킷을 위해 이것을 하고 싶지만 문서가 별로 좋지 않습니다.Mozilla는 이전 버전과 자세한 릴리스를 다운로드하기 쉽습니다.
// Element to display version
var outputVersion = document.getElementById("displayFoxVersion");
try {
// Match UserAgent string with Firefox Desktop
// Detect hybrid Gecko browsers and mobile
if (navigator.userAgent.match(/firefox/i) &&
!navigator.userAgent.match(/mobi|tablet|fennec|android|netscape|seamonkey|iceweasel|iceape|icecat|waterfox|gnuzilla|shadowfox|swiftfox/i)) {
// Create Element and Array to test availability
var createdElement = document.createElement('div'),
createdArray = [],
firefoxVersion = "0";
// Firefox 1.0 released November 9, 2004
// Check a current feature as being true, or NOT undefined
// AND check future features as EQUAL undefined
if (typeof window.alert !== "undefined" &&
typeof window.XPCNativeWrapper === "undefined" &&
typeof window.URL === "undefined") {
firefoxVersion = "1";
}
// Firefox 1.5 released October 15, 2003
// XPCNativeWrapper used to create security wrapper
else if (typeof window.XPCNativeWrapper !== "undefined" &&
typeof window.globalStorage === "undefined" &&
typeof window.devicePixelRatio === "undefined" &&
typeof createdElement.style.animation === "undefined" &&
typeof document.querySelector === "undefined") {
firefoxVersion = "1.5";
}
// Firefox 2 released October 24, 2006
// globalStorage later deprecated in favor of localstorage
else if (typeof window.globalStorage !== "undefined" &&
typeof window.postMessage === "undefined") {
firefoxVersion = "2";
}
// Firefox 3 released June 17, 2008
// postMessage for cross window messaging
else if (typeof window.postMessage !== "undefined" &&
typeof document.querySelector === "undefined") {
firefoxVersion = "3";
}
// Firefox 3.5 released June 30, 2009
// querySelector returns list of the elements from document
else if (typeof document.querySelector !== "undefined" &&
typeof window.mozRequestAnimationFrame === "undefined" &&
typeof Reflect === "undefined") {
firefoxVersion = "3.5";
}
// Firefox 4 released March 22, 2011
// window.URL is Gecko, Webkit is window.webkitURL, manages object URLs
else if (typeof window.URL !== "undefined" &&
typeof createdElement.style.MozAnimation === "undefined") {
firefoxVersion = "4";
}
// After April 2011 releases every six weeks on Tuesday
// Firefox 5 released June 21, 2011
// style.MozAnimation for CSS animation, renamed to style.animation
else if (typeof createdElement.style.MozAnimation !== "undefined" &&
typeof WeakMap === "undefined") {
firefoxVersion = "5";
}
// Firefox 6 released August 16, 2011
// WeakMap collects key value pairs weakly referenced
else if (typeof WeakMap !== "undefined" &&
typeof createdElement.style.textOverflow === "undefined") {
firefoxVersion = "6";
}
// Firefox 7 released September 27, 2011
// textOverflow manages overflowed non displayed content
else if (typeof createdElement.style.textOverflow !== "undefined" &&
typeof createdElement.insertAdjacentHTML === "undefined") {
firefoxVersion = "7";
}
// Firefox 8 released November 8, 2011
// insertAdjacentHTML parses as HTML and inserts into specified position
// faster than direct innerHTML manipulation and
// appends without affecting other elements under the same parent
else if (typeof createdElement.insertAdjacentHTML !== "undefined" &&
typeof navigator.doNotTrack === "undefined") {
firefoxVersion = "8";
}
// Firefox 9 released December 20, 2011
// mozIndexedDB dropped ver 16, renamed window.indexedDB
// IndexDB improved functionality than localstorage
else if (typeof window.mozIndexedDB !== "undefined" &&
typeof document.mozFullScreenEnabled === "undefined") {
firefoxVersion = "9";
}
// Firefox 10 released January 31, 2012
// mozFullScreenEnabled reports if full-screen mode is available
else if (typeof document.mozFullScreenEnabled !== "undefined" &&
typeof window.mozCancelAnimationFrame === "undefined" &&
typeof Reflect === "undefined") {
firefoxVersion = "10";
}
// Firefox 11 released March 13, 2012
// mozCancelAnimationFrame prior to Firefox 23 prefixed with moz
// Cancels an animation frame request
else if (typeof window.mozCancelAnimationFrame !== "undefined" &&
typeof createdElement.style.MozTextAlignLast === "undefined") {
firefoxVersion = "11";
}
// Firefox 12 released April 24, 2012
// MozTextAlignLast how the last line is aligned
else if (typeof createdElement.style.MozTextAlignLast !== "undefined" &&
typeof createdElement.style.MozOpacity !== "undefined") {
firefoxVersion = "12";
}
// Firefox 13 released June 5, 2012
// MozOpacity dropped from this version
else if (typeof createdElement.style.MozOpacity === "undefined" &&
typeof window.globalStorage !== "undefined") {
firefoxVersion = "13";
}
// Firefox 14 released June 26, 2012
// globalStorage dropped from this version
else if (typeof window.globalStorage === "undefined" &&
typeof createdElement.style.borderImage === "undefined" &&
typeof document.querySelector !== "undefined") {
firefoxVersion = "14";
}
// Firefox 15 released August 28, 2012
// borderImage allows drawing an image on the borders of elements
else if (typeof createdElement.style.borderImage !== "undefined" &&
typeof createdElement.style.animation === "undefined") {
firefoxVersion = "15";
}
// Firefox 16 released October 9, 2012
// animation was MozAnimation
else if (typeof createdElement.style.animation !== "undefined" &&
typeof createdElement.style.iterator === "undefined" &&
typeof Math.hypot === "undefined") {
firefoxVersion = "16";
}
// Firefox 17 released November 20, 2012
// version 27 drops iterator and renames italic
// Used to iterate over enumerable properties of an object
else if (typeof createdElement.style.iterator !== "undefined" &&
typeof window.devicePixelRatio === "undefined") {
firefoxVersion = "17";
}
// Firefox 18 released January 8, 2013
// devicePixelRatio returns ratio of one vertical pixel between devices
else if (typeof window.devicePixelRatio !== "undefined" &&
typeof window.getInterface === "undefined" &&
typeof createdElement.style.mixBlendMode === "undefined") {
firefoxVersion = "18";
}
// Firefox 19 released February 19, 2013
// getInterface dropped and renamed in version 32
// Retrieves specified interface pointers
else if (typeof window.getInterface !== "undefined" &&
typeof Math.imul === "undefined") {
firefoxVersion = "19";
}
// Firefox 20 released April 2, 2013
// Math.imul provides fast 32 bit integer multiplication
else if (typeof Math.imul !== "undefined" &&
typeof window.crypto.getRandomValues === "undefined") {
firefoxVersion = "20";
}
// Firefox 21 released May 14, 2013
// getRandomValues lets you get cryptographically random values
else if (typeof window.crypto.getRandomValues !== "undefined" &&
typeof createdElement.style.flex === "undefined") {
firefoxVersion = "21";
}
// Firefox 22 released June 25, 2013
// flex can alter dimensions to fill available space
else if (typeof createdElement.style.flex !== "undefined" &&
typeof window.cancelAnimationFrame === "undefined") {
firefoxVersion = "22";
}
// Firefox 23 released August 6, 2013
// cancelAnimationFrame was mozCancelAnimationFrame
else if (typeof window.cancelAnimationFrame !== "undefined" &&
typeof document.loadBindingDocument !== "undefined" &&
typeof Math.trunc === "undefined") {
firefoxVersion = "23";
}
// Firefox 24 released September 17, 2013
// loadBindingDocument dropped
// loadBindingDocument reintroduced in 25 then dropped again in 26
else if (typeof document.loadBindingDocument === "undefined" &&
typeof Math.trunc === "undefined") {
firefoxVersion = "24";
}
// Firefox 25 released October 29, 2013
// Math.trunc returns number removing fractional digits
else if (typeof Math.trunc !== "undefined" &&
typeof document.loadBindingDocument !== "undefined") {
firefoxVersion = "25";
}
// Firefox 26 released December 10, 2013
// loadBindingDocument dropped
else if (typeof Math.trunc !== "undefined" &&
typeof Math.hypot === "undefined") {
firefoxVersion = "26";
}
// Firefox 27 released February 4, 2014
// Math.hypot returns square root of the sum of squares
else if (typeof Math.hypot !== "undefined" &&
typeof createdArray.entries === "undefined") {
firefoxVersion = "27";
}
// Firefox 28 released March 18, 2014
// entries returns key value pairs for arrays
else if (typeof createdArray.entries !== "undefined" &&
typeof createdElement.style.boxSizing === "undefined") {
firefoxVersion = "28";
}
// Firefox 29 released April 29, 2014
// boxSizing alters CSS box model, calculates width and height of elements
else if (typeof createdElement.style.boxSizing != "undefined" &&
typeof createdElement.style.backgroundBlendMode === "undefined") {
firefoxVersion = "29";
}
// Firefox 30 released June 10, 2014
// backgroundBlendMode blends elements background images
else if (typeof createdElement.style.backgroundBlendMode !== "undefined" &&
typeof createdElement.style.paintOrder === "undefined") {
firefoxVersion = "30";
}
// Firefox 31 released July 22, 2014
// paintOrder specifies the order fill, stroke, markers of shape or element
else if (typeof createdElement.style.paintOrder !== "undefined" &&
typeof createdElement.style.mixBlendMode === "undefined") {
firefoxVersion = "31";
}
// Firefox 32 released September 2, 2014
// mixBlendMode how an element should blend
else if (typeof createdElement.style.mixBlendMode !== "undefined" &&
typeof Number.toInteger !== "undefined") {
firefoxVersion = "32";
}
// Firefox 33 released October 14, 2014
// numberToIntger dropped, used to convert values to integer
else if (typeof Number.toInteger === "undefined" &&
typeof createdElement.style.fontFeatureSettings === "undefined") {
firefoxVersion = "33";
}
// Firefox 34 released December 1, 2014
// fontFeatureSettings control over advanced typographic features
else if (typeof createdElement.style.fontFeatureSettings !== "undefined" &&
typeof navigator.mozIsLocallyAvailable !== "undefined") {
firefoxVersion = "34";
}
// Firefox 35 released January 13, 2015
// mozIsLocallyAvailable dropped
else if (typeof navigator.mozIsLocallyAvailable === "undefined" &&
typeof createdElement.style.MozWindowDragging === "undefined") {
firefoxVersion = "35";
}
// Firefox 36 released February 24, 2015
// quote returns a copy of the string
else if (typeof String.quote !== "undefined" &&
typeof createdElement.style.MozWindowDragging !== "undefined") {
firefoxVersion = "36";
}
// Firefox 37 released March 31, 2015
// quote quickly dropped
else if (typeof String.quote === "undefined" &&
typeof createdElement.style.rubyPosition === "undefined") {
firefoxVersion = "37";
}
// Firefox 38 released May 12, 2015
// rubyPosition defines position of a ruby element relative to its base element
else if (typeof createdElement.style.rubyPosition !== "undefined" &&
typeof window.Headers === "undefined") {
firefoxVersion = "38";
}
// Firefox 39 released July 2, 2015
// Headers allows us to create our own headers objects
else if (typeof window.Headers !== "undefined" &&
typeof Symbol.match === "undefined") {
firefoxVersion = "39";
}
// Firefox 40 released August 11, 2015
// match matches a regular expression against a string
else if (typeof Symbol.match !== "undefined" &&
typeof Symbol.species === "undefined") {
firefoxVersion = "40";
}
// Firefox 41 released September 22, 2015
// species allows subclasses to over ride the default constructor
else if (typeof Symbol.species !== "undefined" &&
typeof Reflect === "undefined") {
firefoxVersion = "41";
}
// Firefox 42 released November 3, 2015
// mozRequestAnimationFrame and mozFullScreenEnabled dropped
// Reflect offers methods for interceptable JavaScript operations
else if (typeof Reflect !== "undefined" &&
typeof window.screen.orientation === "undefined") {
firefoxVersion = "42";
}
// Firefox 43 released December 15, 2015
// orientation is mozOrientation in B2G and Android
else if (typeof window.screen.orientation !== "undefined" &&
typeof document.charset === "undefined") {
firefoxVersion = "43";
}
// Firefox 44 released January 26, 2016
// charset is for legacy, use document.characterSet
else if (typeof document.charset !== "undefined" &&
typeof window.onstorage === "undefined") {
firefoxVersion = "44";
}
// Firefox 45 released March 8, 2016
// onstorage contains an event handler that runs when the storage event fires
else if (typeof window.onstorage !== "undefined" &&
typeof window.onabsolutedeviceorientation === "undefined") {
firefoxVersion = "45";
}
// Firefox 46 - beta
// onabsolutedeviceorientation
else if (typeof window.onabsolutedeviceorientation !== "undefined") {
firefoxVersion = "46 or above";
}
// Else could not verify
else {
outputVersion.innerHTML = "Could not verify Mozilla Firefox";
}
// Display Firefox version
outputVersion.innerHTML = "Verified as Mozilla Firefox " + firefoxVersion;
// Else not detected
} else {
outputVersion.innerHTML = "Mozilla Firefox not detected";
}
} catch (e) {
// Statement to handle exceptions
outputVersion.innerHTML = "An error occured. This could be because the default settings in Firefox have changed. Check about.config ";
}
<div id="displayFoxVersion"></div>
다른 답변:
parseFloat(navigator.userAgent.split('Firefox/').pop(), 10) >= 92;
regexps를 사용하는 것보다 더 빠를 것입니다...
사용자 에이전트를 탐지한 다음 응답에서 파이어폭스를 확인합니다.
navigator.userAgent.toLowerCase().includes('firefox') // true || false
<script type="text/javascript">
var isChrome = /Chrome/.test(navigator.userAgent) && /Google
Inc/.test(navigator.vendor);
var isFirefox =
navigator.userAgent.toLowerCase().indexOf('firefox') > -1;
if (isChrome)
{
document.write('<'+'link rel="stylesheet"
href="css/chrome.css" />');
}
else if(isFirefox)
{
document.write('<'+'link rel="stylesheet"
href="css/Firefox.css" />');
}
else
{
document.write('<'+'link rel="stylesheet"
href="css/IE.css" />');
}
</script>
이것은 IE, Firefox 및 Chrome에 완벽하게 작동합니다.
사용하다InternalError
다음과 같이:
var isFirefox = !!window.InternalError
document.write("Is Firefox: " + isFirefox)
이 캔으로 알 수 있습니다.나는 다른 모든 브라우저들이 기꺼이 이 오류를 가지고 있지 않다는 링크를 사용합니다.파이어폭스는 글로벌 속성으로 편리하게 이에 대한 지식을 제공합니다.
저는 우연히 "too much recursion"을 실행함으로써 이것을 발견했고, 다른 브라우저에서 다른 오류를 발생시킨다는 것을 깨달았습니다.
자, 자
var ffversion = '18';
var is_firefox = navigator.userAgent.toLowerCase().indexOf('firefox/'+ffversion) > -1;
alert(is_firefox);
언급URL : https://stackoverflow.com/questions/7000190/detect-all-firefox-versions-in-js
'programing' 카테고리의 다른 글
Symfony2 양식 입력에 클래스 속성을 설정하는 방법 (0) | 2023.08.21 |
---|---|
어레이에 추가 j쿼리 (0) | 2023.08.21 |
'div'의 알려진 속성이 아니므로 'target'에 바인딩할 수 없습니다. (0) | 2023.08.21 |
파워셸을 사용하여 바로 가기(.lnk) 파일의 대상 가져오기 (0) | 2023.08.21 |
PowerShell을 사용하여 클래스를 작성할 수 있습니까? (0) | 2023.08.21 |