UNPKG

beef-npm

Version:

Node.js package to install and interact with BeEF (Browser Exploitation Framework)

893 lines (775 loc) 201 kB
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>JSDoc: Source: browser.js</title> <script src="scripts/prettify/prettify.js"> </script> <script src="scripts/prettify/lang-css.js"> </script> <!--[if lt IE 9]> <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> </head> <body> <div id="main"> <h1 class="page-title">Source: browser.js</h1> <section> <article> <pre class="prettyprint source linenums"><code>// // Copyright (c) 2006-2024 Wade Alcorn - wade@bindshell.net // Browser Exploitation Framework (BeEF) - https://beefproject.com // See the file 'doc/COPYING' for copying permission // /** * Basic browser functions. * @namespace beef.browser */ beef.browser = { /** * Returns the protocol. * @example: beef.browser.getProtocol() */ getProtocol: function() { return document.location.protocol; }, /** * Returns the user agent that the browser is claiming to be. * @example: beef.browser.getBrowserReportedName() */ getBrowserReportedName: function () { return navigator.userAgent; }, /** * Returns the underlying layout engine in use by the browser. * @example: beef.browser.getBrowserEngine() */ getBrowserEngine: function() { try { var engine = platform.layout; if (!!engine) return engine; } catch (e) {} return 'unknown'; }, /** * Returns true if Avant Browser. * @example: beef.browser.isA() */ isA: function () { return window.navigator.userAgent.match(/Avant TriCore/) != null; }, /** * Returns true if Iceweasel. * @example: beef.browser.isIceweasel() */ isIceweasel: function () { return window.navigator.userAgent.match(/Iceweasel\/\d+\.\d/) != null; }, /** * Returns true if Midori. * @example: beef.browser.isMidori() */ isMidori: function () { return window.navigator.userAgent.match(/Midori\/\d+\.\d/) != null; }, /** * Returns true if Odyssey * @example: beef.browser.isOdyssey() */ isOdyssey: function () { return (window.navigator.userAgent.match(/Odyssey Web Browser/) != null &amp;&amp; window.navigator.userAgent.match(/OWB\/\d+\.\d/) != null); }, /** * Returns true if Brave * @example: beef.browser.isBrave() */ isBrave: function(){ return (window.navigator.userAgent.match(/brave\/\d+\.\d/) != null &amp;&amp; window.navigator.userAgent.match(/Brave\/\d+\.\d/) != null); }, /** * Returns true if IE6. * @example: beef.browser.isIE6() */ isIE6: function () { return !window.XMLHttpRequest &amp;&amp; !window.globalStorage; }, /** * Returns true if IE7. * @example: beef.browser.isIE7() */ isIE7: function () { return !!window.XMLHttpRequest &amp;&amp; !window.chrome &amp;&amp; !window.opera &amp;&amp; !window.getComputedStyle &amp;&amp; !window.globalStorage &amp;&amp; !document.documentMode; }, /** * Returns true if IE8. * @example: beef.browser.isIE8() */ isIE8: function () { return !!window.XMLHttpRequest &amp;&amp; !window.chrome &amp;&amp; !window.opera &amp;&amp; !!document.documentMode &amp;&amp; !!window.XDomainRequest &amp;&amp; !window.performance; }, /** * Returns true if IE9. * @example: beef.browser.isIE9() */ isIE9: function () { return !!window.XMLHttpRequest &amp;&amp; !window.chrome &amp;&amp; !window.opera &amp;&amp; !!document.documentMode &amp;&amp; !!window.XDomainRequest &amp;&amp; !!window.performance &amp;&amp; typeof navigator.msMaxTouchPoints === "undefined"; }, /** * * Returns true if IE10. * @example: beef.browser.isIE10() */ isIE10: function () { return !!window.XMLHttpRequest &amp;&amp; !window.chrome &amp;&amp; !window.opera &amp;&amp; !!document.documentMode &amp;&amp; !!window.XDomainRequest &amp;&amp; !!window.performance &amp;&amp; typeof navigator.msMaxTouchPoints !== "undefined"; }, /** * * Returns true if IE11. * @example: beef.browser.isIE11() */ isIE11: function () { return !!window.XMLHttpRequest &amp;&amp; !window.chrome &amp;&amp; !window.opera &amp;&amp; !!document.documentMode &amp;&amp; !!window.performance &amp;&amp; typeof navigator.msMaxTouchPoints !== "undefined" &amp;&amp; typeof document.selection === "undefined" &amp;&amp; typeof document.createStyleSheet === "undefined" &amp;&amp; typeof window.createPopup === "undefined" &amp;&amp; typeof window.XDomainRequest === "undefined"; }, /** * * Returns true if Edge. * @example: beef.browser.isEdge() */ isEdge: function () { return !beef.browser.isIE() &amp;&amp; !!window.styleMedia &amp;&amp; (/Edg\/\d+\.\d/.test(window.navigator.userAgent) || /Edge\/\d+\.\d/.test(window.navigator.userAgent)); }, /** * Returns true if IE. * @example: beef.browser.isIE() */ isIE: function () { return this.isIE6() || this.isIE7() || this.isIE8() || this.isIE9() || this.isIE10() || this.isIE11(); }, /** * Returns true if FF2. * @example: beef.browser.isFF2() */ isFF2: function () { return !!window.globalStorage &amp;&amp; !window.postMessage; }, /** * Returns true if FF3. * @example: beef.browser.isFF3() */ isFF3: function () { return !!window.globalStorage &amp;&amp; !!window.postMessage &amp;&amp; !JSON.parse; }, /** * Returns true if FF3.5. * @example: beef.browser.isFF3_5() */ isFF3_5: function () { return !!window.globalStorage &amp;&amp; !!JSON.parse &amp;&amp; !window.FileReader; }, /** * Returns true if FF3.6. * @example: beef.browser.isFF3_6() */ isFF3_6: function () { return !!window.globalStorage &amp;&amp; !!window.FileReader &amp;&amp; !window.multitouchData &amp;&amp; !window.history.replaceState; }, /** * Returns true if FF4. * @example: beef.browser.isFF4() */ isFF4: function () { return !!window.globalStorage &amp;&amp; !!window.history.replaceState &amp;&amp; window.navigator.userAgent.match(/Firefox\/4\./) != null; }, /** * Returns true if FF5. * @example: beef.browser.isFF5() */ isFF5: function () { return !!window.history.replaceState &amp;&amp; window.navigator.userAgent.match(/Firefox\/5\./) != null; }, /** * Returns true if FF6. * @example: beef.browser.isFF6() */ isFF6: function () { return !!window.history.replaceState &amp;&amp; window.navigator.userAgent.match(/Firefox\/6\./) != null; }, /** * Returns true if FF7. * @example: beef.browser.isFF7() */ isFF7: function () { return !!window.history.replaceState &amp;&amp; window.navigator.userAgent.match(/Firefox\/7\./) != null; }, /** * Returns true if FF8. * @example: beef.browser.isFF8() */ isFF8: function () { return !!window.history.replaceState &amp;&amp; window.navigator.userAgent.match(/Firefox\/8\./) != null; }, /** * Returns true if FF9. * @example: beef.browser.isFF9() */ isFF9: function () { return !!window.history.replaceState &amp;&amp; window.navigator.userAgent.match(/Firefox\/9\./) != null; }, /** * Returns true if FF10. * @example: beef.browser.isFF10() */ isFF10: function () { return !!window.history.replaceState &amp;&amp; window.navigator.userAgent.match(/Firefox\/10\./) != null; }, /** * Returns true if FF11. * @example: beef.browser.isFF11() */ isFF11: function () { return !!window.history.replaceState &amp;&amp; window.navigator.userAgent.match(/Firefox\/11\./) != null; }, /** * Returns true if FF12 * @example: beef.browser.isFF12() */ isFF12: function () { return !!window.history.replaceState &amp;&amp; window.navigator.userAgent.match(/Firefox\/12\./) != null; }, /** * Returns true if FF13 * @example: beef.browser.isFF13() */ isFF13: function () { return !!window.history.replaceState &amp;&amp; window.navigator.userAgent.match(/Firefox\/13\./) != null; }, /** * Returns true if FF14 * @example: beef.browser.isFF14() */ isFF14: function () { return !!window.history.replaceState &amp;&amp; window.navigator.userAgent.match(/Firefox\/14\./) != null; }, /** * Returns true if FF15 * @example: beef.browser.isFF15() */ isFF15: function () { return !!window.history.replaceState &amp;&amp; window.navigator.userAgent.match(/Firefox\/15\./) != null; }, /** * Returns true if FF16 * @example: beef.browser.isFF16() */ isFF16: function () { return !!window.history.replaceState &amp;&amp; window.navigator.userAgent.match(/Firefox\/16\./) != null; }, /** * Returns true if FF17 * @example: beef.browser.isFF17() */ isFF17: function () { return !!window.history.replaceState &amp;&amp; window.navigator.userAgent.match(/Firefox\/17\./) != null; }, /** * Returns true if FF18 * @example: beef.browser.isFF18() */ isFF18: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; window.navigator.userAgent.match(/Firefox\/18\./) != null; }, /** * Returns true if FF19 * @example: beef.browser.isFF19() */ isFF19: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; window.navigator.userAgent.match(/Firefox\/19\./) != null; }, /** * Returns true if FF20 * @example: beef.browser.isFF20() */ isFF20: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; window.navigator.userAgent.match(/Firefox\/20\./) != null; }, /** * Returns true if FF21 * @example: beef.browser.isFF21() */ isFF21: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; window.navigator.userAgent.match(/Firefox\/21\./) != null; }, /** * Returns true if FF22 * @example: beef.browser.isFF22() */ isFF22: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; window.navigator.userAgent.match(/Firefox\/22\./) != null; }, /** * Returns true if FF23 * @example: beef.browser.isFF23() */ isFF23: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; window.navigator.userAgent.match(/Firefox\/23\./) != null; }, /** * Returns true if FF24 * @example: beef.browser.isFF24() */ isFF24: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; window.navigator.userAgent.match(/Firefox\/24\./) != null; }, /** * Returns true if FF25 * @example: beef.browser.isFF25() */ isFF25: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; window.navigator.userAgent.match(/Firefox\/25\./) != null; }, /** * Returns true if FF26 * @example: beef.browser.isFF26() */ isFF26: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; window.navigator.userAgent.match(/Firefox\/26./) != null; }, /** * Returns true if FF27 * @example: beef.browser.isFF27() */ isFF27: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/27./) != null; }, /** * Returns true if FF28 * @example: beef.browser.isFF28() */ isFF28: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt !== 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/28./) != null; }, /** * Returns true if FF29 * @example: beef.browser.isFF29() */ isFF29: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/29./) != null; }, /** * Returns true if FF30 * @example: beef.browser.isFF30() */ isFF30: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/30./) != null; }, /** * Returns true if FF31 * @example: beef.browser.isFF31() */ isFF31: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/31./) != null; }, /** * Returns true if FF32 * @example: beef.browser.isFF32() */ isFF32: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/32./) != null; }, /** * Returns true if FF33 * @example: beef.browser.isFF33() */ isFF33: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/33./) != null; }, /** * Returns true if FF34 * @example: beef.browser.isFF34() */ isFF34: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/34./) != null; }, /** * Returns true if FF35 * @example: beef.browser.isFF35() */ isFF35: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/35./) != null; }, /** * Returns true if FF36 * @example: beef.browser.isFF36() */ isFF36: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/36./) != null; }, /** * Returns true if FF37 * @example: beef.browser.isFF37() */ isFF37: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/37./) != null; }, /** * Returns true if FF38 * @example: beef.browser.isFF38() */ isFF38: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/38./) != null; }, /** * Returns true if FF39 * @example: beef.browser.isFF39() */ isFF39: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/39./) != null; }, /** * Returns true if FF40 * @example: beef.browser.isFF40() */ isFF40: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/40./) != null; }, /** * Returns true if FF41 * @example: beef.browser.isFF41() */ isFF41: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/41./) != null; }, /** * Returns true if FF42 * @example: beef.browser.isFF42() */ isFF42: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/42./) != null; }, /** * Returns true if FF43 * @example: beef.browser.isFF43() */ isFF43: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/43./) != null; }, /** * Returns true if FF44 * @example: beef.browser.isFF44() */ isFF44: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/44./) != null; }, /** * Returns true if FF45 * @example: beef.browser.isFF45() */ isFF45: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/45./) != null; }, /** * Returns true if FF46 * @example: beef.browser.isFF46() */ isFF46: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/46./) != null; }, /** * Returns true if FF47 * @example: beef.browser.isFF47() */ isFF47: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/47./) != null; }, /** * Returns true if FF48 * @example: beef.browser.isFF48() */ isFF48: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/48./) != null; }, /** * Returns true if FF49 * @example: beef.browser.isFF49() */ isFF49: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/49./) != null; }, /** * Returns true if FF50 * @example: beef.browser.isFF50() */ isFF50: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/50./) != null; }, /** * Returns true if FF51 * @example: beef.browser.isFF51() */ isFF51: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/51./) != null; }, /** * Returns true if FF52 * @example: beef.browser.isFF52() */ isFF52: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/52./) != null; }, /** * Returns true if FF53 * @example: beef.browser.isFF53() */ isFF53: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/53./) != null; }, /** * Returns true if FF54 * @example: beef.browser.isFF54() */ isFF54: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/54./) != null; }, /** * Returns true if FF55 * @example: beef.browser.isFF55() */ isFF55: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/55./) != null; }, /** * Returns true if FF56 * @example: beef.browser.isFF56() */ isFF56: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/56./) != null; }, /** * Returns true if FF57 * @example: beef.browser.isFF57() */ isFF57: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/57./) != null; }, /** * Returns true if FF58 * @example: beef.browser.isFF58() */ isFF58: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/58./) != null; }, /** * Returns true if FF59 * @example: beef.browser.isFF59() */ isFF59: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/59./) != null; }, /** * Returns true if FF60 * @example: beef.browser.isFF60() */ isFF60: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/60./) != null; }, /** * Returns true if FF61 * @example: beef.browser.isFF61() */ isFF61: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/61./) != null; }, /** * Returns true if FF62 * @example: beef.browser.isFF62() */ isFF62: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/62./) != null; }, /** * Returns true if FF63 * @example: beef.browser.isFF63() */ isFF63: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/63./) != null; }, /** * Returns true if FF64 * @example: beef.browser.isFF64() */ isFF64: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/64./) != null; }, /** * Returns true if FF65 * @example: beef.browser.isFF65() */ isFF65: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/65./) != null; }, /** * Returns true if FF66 * @example: beef.browser.isFF66() */ isFF66: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/66./) != null; }, /** * Returns true if FF67 * @example: beef.browser.isFF67() */ isFF67: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/67./) != null; }, /** * Returns true if FF68 * @example: beef.browser.isFF68() */ isFF68: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/68./) != null; }, /** * Returns true if FF69 * @example: beef.browser.isFF69() */ isFF69: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/69./) != null; }, /** * Returns true if FF70 * @example: beef.browser.isFF70() */ isFF70: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/70./) != null; }, /** * Returns true if FF71 * @example: beef.browser.isFF71() */ isFF71: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/71./) != null; }, /** * Returns true if FF72 * @example: beef.browser.isFF72() */ isFF72: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/72./) != null; }, /** * Returns true if FF73 * @example: beef.browser.isFF73() */ isFF73: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/73./) != null; }, /** * Returns true if FF74 * @example: beef.browser.isFF74() */ isFF74: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/74./) != null; }, /** * Returns true if FF75 * @example: beef.browser.isFF75() */ isFF75: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/75./) != null; }, /** * Returns true if FF76 * @example: beef.browser.isFF76() */ isFF76: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/76./) != null; }, /** * Returns true if FF77 * @example: beef.browser.isFF77() */ isFF77: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/77./) != null; }, /** * Returns true if FF78 * @example: beef.browser.isFF78() */ isFF78: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/78./) != null; }, /** * Returns true if FF79 * @example: beef.browser.isFF79() */ isFF79: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/79./) != null; }, /** * Returns true if FF80 * @example: beef.browser.isFF80() */ isFF80: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/80./) != null; }, /** * Returns true if FF81 * @example: beef.browser.isFF81() */ isFF81: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/81./) != null; }, /** * Returns true if FF82 * @example: beef.browser.isFF82() */ isFF82: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/82./) != null; }, /** * Returns true if FF83 * @example: beef.browser.isFF83() */ isFF83: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/83./) != null; }, /** * Returns true if FF84 * @example: beef.browser.isFF84() */ isFF84: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/84./) != null; }, /** * Returns true if FF85 * @example: beef.browser.isFF85() */ isFF85: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/85./) != null; }, /** * Returns true if FF86 * @example: beef.browser.isFF86() */ isFF86: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/86./) != null; }, /** * Returns true if FF87 * @example: beef.browser.isFF87() */ isFF87: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/87./) != null; }, /** * Returns true if FF88 * @example: beef.browser.isFF88() */ isFF88: function () { return !!window.devicePixelRatio &amp;&amp; !!window.history.replaceState &amp;&amp; typeof navigator.mozGetUserMedia != "undefined" &amp;&amp; (typeof window.crypto != "undefined" &amp;&amp; typeof window.crypto.getRandomValues != "undefined") &amp;&amp; typeof Math.hypot == 'function' &amp;&amp; typeof String.prototype.codePointAt === 'function' &amp;&amp; typeof Number.isSafeInteger === 'function' &amp;&amp; window.navigator.userAgent.match(/Firefox\/88./) != null; }, /** * Returns true if FF89 * @example: beef.browser.isFF89() */