ตรวจสอบ Firefox ทุกเวอร์ชันใน JS


152

วิธีการตรวจหา Firefox ใน JavaScript
ฉันต้องการตรวจสอบ Firefox ทุกรุ่น


5
คุณพยายามทำอะไรจริงๆ โดยปกติจะมีวิธีที่ดีกว่าในการแก้ปัญหา (เช่นโดยใช้การตรวจจับคุณสมบัติ) กว่าการตรวจสอบเบราว์เซอร์ที่เฉพาะเจาะจง
jfriend00

3
เหตุใดผู้คนจึงโพสต์คำถามรับคนที่ตอบคำถามเพื่อขอคำชี้แจงจากนั้นคนที่ถามคำถามนั้นจะไม่ตอบสนอง ประเด็นคืออะไร? ดูเหมือนจะหยาบคายกับฉัน
jfriend00

38
ในกรณีของคุณอาจเป็นเพราะคุณไม่ได้ตอบคำถามคุณให้ความเห็นเกี่ยวกับสาเหตุที่ไม่ควรทำ ด้วยเหตุผลหลายประการที่ต้องมีการตรวจสอบเบราว์เซอร์เช่นจำเป็นต้องแสดงข้อความเตือนเช่น 'Firefox ไม่ได้รับการสนับสนุน' บนเว็บไซต์ของ บริษัท ภายในขนาดใหญ่ที่สร้างขึ้นสำหรับ IE มานานแล้วและไม่มีใครคิดว่ามันคุ้มค่า ที่จะทำอะไรมากไปกว่านั้น แต่คุณต้องให้ผู้ใช้ทราบเพื่อพวกเขาจะไม่ผิดหวังจากข้อผิดพลาดในขณะที่พยายามที่จะใช้งาน ฯลฯ
pilavdzice

3
ตัวอย่าง: Firefox ใช้รหัสคีย์ที่แตกต่างกันสำหรับคีย์ _ / - และ + / = ที่ถูกกดไปยังเบราว์เซอร์อื่นทั้งหมดซึ่งเป็นสาเหตุที่ฉันต้องตรวจสอบว่าตัวแทนผู้ใช้เป็น Firefox หรือไม่
moloko

2
ตัวอย่าง: Firefox ไม่ทำงานกับ//# sourceURLวิธีการต่อท้ายสคริปต์พวกเขาจะต้องevaled แต่เบราว์เซอร์อื่น ๆ ทั้งหมดทำ
glenatron

คำตอบ:


294

สิ่งนี้จะตรวจพบ Firefox ทุกเวอร์ชัน:

var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;

โดยเฉพาะอย่างยิ่ง:

if(navigator.userAgent.toLowerCase().indexOf('firefox') > -1){
     // Do Firefox-related activities
}

คุณอาจต้องการพิจารณาใช้ ala Modernizrหรือเครื่องมือตรวจสอบเพื่อให้บรรลุสิ่งที่คุณต้องการ


31
หรือด้วย regexvar is_firefox = /firefox/i.test(navigator.userAgent)
JackMahoney

17
ฉันเชื่อว่าindexOfวิธีการสตริงเป็นวิธีที่เร็วกว่าการแสดงออกปกติ
Tomáš Zato - Reinstate Monica

2
ฉันจะเน้นสิ่งที่ @ TomášZatoพูด นี่ไม่ใช่การค้นหาที่ซับซ้อนดังนั้นจึงไม่ควรใช้ regex ... หรือฉันขาดอะไรบางอย่างเกี่ยวกับ regex
dudewad

2
การค้นหา regex นั้นดีและรัดกุมสำหรับสถานที่ที่มีความกะทัดรัดสำคัญกว่าความเร็ว และง่ายกว่าและชัดเจนกว่าในการแก้ไขสำหรับเบราว์เซอร์ที่เหมือน Firefox ซึ่งไม่เป็นประโยชน์ต่อแบรนด์เช่น: /firefox|iceweasel/i.test(navigator.userAgent)
android.weasel

4
รายการต่อไปนี้อนุญาตให้ตรวจสอบ Firefox หรือเบราว์เซอร์อื่น ๆ : stackoverflow.com/questions/9847580/…
Max Stern

14

หากคุณต้องการทราบว่าเป็นรุ่นตัวเลขของ FireFox คุณสามารถใช้ตัวอย่างต่อไปนี้:

var match = window.navigator.userAgent.match(/Firefox\/([0-9]+)\./);
var ver = match ? parseInt(match[1]) : 0;

5

สคริปต์นี้ตรวจพบ Firefox ทุกเวอร์ชันสำหรับเดสก์ท็อปตั้งแต่เวอร์ชัน 1 ถึง 46

นี่เป็นครั้งที่สามที่ฉันพยายามตอบคำถามนี้ใน StackOverflow เพราะฉันหาวิธีใหม่ ๆ ในการทำลายสคริปต์ของฉัน อย่างไรก็ตามฉันคิดว่ามันใช้งานได้แล้ว มันเป็นแบบฝึกหัดที่ยอดเยี่ยมในการเรียนรู้เกี่ยวกับคุณสมบัติของ Firefox และน่าสนใจเพื่อดูว่าสิ่งต่าง ๆ มีวิวัฒนาการอย่างไร สคริปต์สามารถเขียนใหม่ด้วยคุณสมบัติที่แตกต่างกันฉันเลือกคนที่ฉันคิดว่าจะมีประโยชน์มากที่สุดฉันชอบที่คนอื่นจะเขียนด้วยคุณสมบัติที่มีประโยชน์และโพสต์ที่นี่และเปรียบเทียบผลลัพธ์

ฉันวางสคริปต์ในคำสั่งลองในกรณีที่ผู้ใช้มีการตั้งค่าที่ถูกปิดใช้งานใน about.config ไม่เช่นนั้นฉันจะทดสอบกับ Firefox ทุกเวอร์ชันและตรวจพบแต่ละอัน ฉันให้คำอธิบายสั้น ๆ เกี่ยวกับคุณลักษณะที่ใช้สำหรับแต่ละความคิดเห็น ฉันต้องการทำเช่นนี้สำหรับ Webkit ด้วย แต่พบว่าเอกสารไม่ดี 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>


3

เป็นเวลานานที่ฉันได้ใช้ทางเลือก:

('netscape' in window) && / rv:/.test(navigator.userAgent)

เพราะฉันไม่เชื่อถือสตริงตัวแทนผู้ใช้ ข้อผิดพลาดบางอย่างไม่สามารถตรวจพบได้โดยใช้การตรวจจับคุณสมบัติดังนั้นการตรวจสอบเบราว์เซอร์จึงเป็นสิ่งจำเป็น

นอกจากนี้หากคุณกำลังแก้ไขข้อผิดพลาดใน Gecko ข้อผิดพลาดน่าจะเป็นอนุพันธ์ของ Firefox และรหัสนี้ควรทำงานกับอนุพันธ์ด้วยเช่นกัน (Waterfox และ Pale Moon มี 'Firefox' ในสตริงตัวแทนผู้ใช้หรือไม่)


0
    <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


โปรดแก้ไขเพื่อเพิ่มรหัสที่มีความหมายและคำอธิบายโซลูชันที่นี่ การโพสต์ตัวอย่างที่ เล็กที่สุดสมบูรณ์ตรวจสอบได้ซึ่งแสดงวิธีแก้ปัญหาของคุณ ขอบคุณ :-)!
ปีเตอร์


-5

ทางออกที่ดีที่สุดสำหรับฉัน:

function GetIEVersion() {
  var sAgent = window.navigator.userAgent;
  var Idx = sAgent.indexOf("MSIE");
  // If IE, return version number.
  if (Idx > 0)
    return parseInt(sAgent.substring(Idx+ 5, sAgent.indexOf(".", Idx)));

  // If IE 11 then look for Updated user agent string.
  else if (!!navigator.userAgent.match(/Trident\/7\./))
    return 11;

  else
    return 0; //It is not IE

}
if (GetIEVersion() > 0){
			 alert("This is IE " + GetIEVersion());
		}else {
			 alert("This no is IE ");
		}		

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.