Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
190 changes: 75 additions & 115 deletions dist/jquery.browser.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*!
* jQuery Browser Plugin 0.1.0
* jQuery Browser Plugin 0.2.0
* https://github.com/gabceb/jquery-browser-plugin
*
* Original jquery-browser code Copyright 2005, 2015 jQuery Foundation, Inc. and other contributors
Expand All @@ -10,14 +10,14 @@
*
* Released under the MIT license
*
* Date: 05-07-2015
* Date: 12-05-2025
*/
/*global window: false */

(function (factory) {
(function(factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define(['jquery'], function ($) {
define(['jquery'], function($) {
return factory($);
});
} else if (typeof module === 'object' && typeof module.exports === 'object') {
Expand All @@ -30,162 +30,122 @@
}(function(jQuery) {
"use strict";

function uaMatch( ua ) {
function uaMatch(ua) {
// If an UA is not provided, default to the current browser UA.
if ( ua === undefined ) {
if (ua === undefined) {
ua = window.navigator.userAgent;
}
ua = ua.toLowerCase();

var match = /(edge)\/([\w.]+)/.exec( ua ) ||
/(opr)[\/]([\w.]+)/.exec( ua ) ||
/(chrome)[ \/]([\w.]+)/.exec( ua ) ||
/(iemobile)[\/]([\w.]+)/.exec( ua ) ||
/(version)(applewebkit)[ \/]([\w.]+).*(safari)[ \/]([\w.]+)/.exec( ua ) ||
/(webkit)[ \/]([\w.]+).*(version)[ \/]([\w.]+).*(safari)[ \/]([\w.]+)/.exec( ua ) ||
/(webkit)[ \/]([\w.]+)/.exec( ua ) ||
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) ||
/(msie) ([\w.]+)/.exec( ua ) ||
ua.indexOf("trident") >= 0 && /(rv)(?::| )([\w.]+)/.exec( ua ) ||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) ||
[];

var platform_match = /(ipad)/.exec( ua ) ||
/(ipod)/.exec( ua ) ||
/(windows phone)/.exec( ua ) ||
/(iphone)/.exec( ua ) ||
/(kindle)/.exec( ua ) ||
/(silk)/.exec( ua ) ||
/(android)/.exec( ua ) ||
/(win)/.exec( ua ) ||
/(mac)/.exec( ua ) ||
/(linux)/.exec( ua ) ||
/(cros)/.exec( ua ) ||
/(playbook)/.exec( ua ) ||
/(bb)/.exec( ua ) ||
/(blackberry)/.exec( ua ) ||
[];
var match =
// NEW - Chromium Edge first
/(edg|edga|edgios)\/([\w.]+)/.exec(ua) ||

// Legacy Edge (EdgeHTML)
/(edge)\/([\w.]+)/.exec(ua) ||

/(opr)[\/]([\w.]+)/.exec(ua) ||
/(chrome)[ \/]([\w.]+)/.exec(ua) ||
/(iemobile)[\/]([\w.]+)/.exec(ua) ||
/(version)(applewebkit)[ \/]([\w.]+).*(safari)[ \/]([\w.]+)/.exec(ua) ||
/(webkit)[ \/]([\w.]+).*(version)[ \/]([\w.]+).*(safari)[ \/]([\w.]+)/.exec(ua) ||
/(webkit)[ \/]([\w.]+)/.exec(ua) ||
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
/(msie) ([\w.]+)/.exec(ua) ||
ua.indexOf("trident") >= 0 && /(rv)(?::| )([\w.]+)/.exec(ua) ||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || [];

var platform_match =
/(ipad)/.exec(ua) ||
/(ipod)/.exec(ua) ||
/(windows phone)/.exec(ua) ||
/(iphone)/.exec(ua) ||
/(kindle)/.exec(ua) ||
/(silk)/.exec(ua) ||
/(android)/.exec(ua) ||
/(win)/.exec(ua) ||
/(mac)/.exec(ua) ||
/(linux)/.exec(ua) ||
/(cros)/.exec(ua) ||
/(playbook)/.exec(ua) ||
/(bb)/.exec(ua) ||
/(blackberry)/.exec(ua) || [];

var browser = {},
matched = {
browser: match[ 5 ] || match[ 3 ] || match[ 1 ] || "",
version: match[ 2 ] || match[ 4 ] || "0",
versionNumber: match[ 4 ] || match[ 2 ] || "0",
platform: platform_match[ 0 ] || ""
};

if ( matched.browser ) {
browser[ matched.browser ] = true;

// Normalize new Chromium Edge naming
browserName =
match[1] === "edg" ||
match[1] === "edga" ||
match[1] === "edgios" ?
"msedge" :
match[5] || match[3] || match[1] || "",

matched = {
browser: browserName,
version: match[2] || match[4] || "0",
versionNumber: match[4] || match[2] || "0",
platform: platform_match[0] || ""
};

if (matched.browser) {
browser[matched.browser] = true;
browser.version = matched.version;
browser.versionNumber = parseInt(matched.versionNumber, 10);
}

if ( matched.platform ) {
browser[ matched.platform ] = true;
if (matched.platform) {
browser[matched.platform] = true;
}

// These are all considered mobile platforms, meaning they run a mobile browser
if ( browser.android || browser.bb || browser.blackberry || browser.ipad || browser.iphone ||
browser.ipod || browser.kindle || browser.playbook || browser.silk || browser[ "windows phone" ]) {
if (browser.android || browser.bb || browser.blackberry || browser.ipad || browser.iphone ||
browser.ipod || browser.kindle || browser.playbook || browser.silk || browser["windows phone"]) {
browser.mobile = true;
}

// These are all considered desktop platforms, meaning they run a desktop browser
if ( browser.cros || browser.mac || browser.linux || browser.win ) {
// These are all considered desktop platforms
if (browser.cros || browser.mac || browser.linux || browser.win) {
browser.desktop = true;
}

// Chrome, Opera 15+ and Safari are webkit based browsers
if ( browser.chrome || browser.opr || browser.safari ) {
if (browser.chrome || browser.opr || browser.safari || browser.msedge) {
browser.webkit = true;
}

// IE11 has a new token so we will assign it msie to avoid breaking changes
if ( browser.rv || browser.iemobile) {
if (browser.rv || browser.iemobile) {
var ie = "msie";

matched.browser = ie;
browser[ie] = true;
}

// Edge is officially known as Microsoft Edge, so rewrite the key to match
if ( browser.edge ) {
// Legacy Edge is officially known as Microsoft Edge, so rewrite the key
if (browser.edge) {
delete browser.edge;
var msedge = "msedge";

matched.browser = msedge;
browser[msedge] = true;
}

// Blackberry browsers are marked as Safari on BlackBerry
if ( browser.safari && browser.blackberry ) {
var blackberry = "blackberry";

matched.browser = blackberry;
browser[blackberry] = true;
}

// Playbook browsers are marked as Safari on Playbook
if ( browser.safari && browser.playbook ) {
var playbook = "playbook";

matched.browser = playbook;
browser[playbook] = true;
}

// BB10 is a newer OS version of BlackBerry
if ( browser.bb ) {
var bb = "blackberry";

matched.browser = bb;
browser[bb] = true;
}
var msedge_legacy = "edge";

// Opera 15+ are identified as opr
if ( browser.opr ) {
var opera = "opera";

matched.browser = opera;
browser[opera] = true;
}

// Stock Android browsers are marked as Safari on Android.
if ( browser.safari && browser.android ) {
var android = "android";

matched.browser = android;
browser[android] = true;
}

// Kindle browsers are marked as Safari on Kindle
if ( browser.safari && browser.kindle ) {
var kindle = "kindle";

matched.browser = kindle;
browser[kindle] = true;
}

// Kindle Silk browsers are marked as Safari on Kindle
if ( browser.safari && browser.silk ) {
var silk = "silk";

matched.browser = silk;
browser[silk] = true;
matched.browser = msedge_legacy;
browser[msedge_legacy] = true;
}

// Assign the name and platform variable
// Assign name & platform
browser.name = matched.browser;
browser.platform = matched.platform;

return browser;
}


// Run the matching process, also assign the function to the returned object
// for manual, jQuery-free use if desired
window.jQBrowser = uaMatch( window.navigator.userAgent );
window.jQBrowser = uaMatch(window.navigator.userAgent);
window.jQBrowser.uaMatch = uaMatch;

// Only assign to jQuery.browser if jQuery is loaded
if ( jQuery ) {
if (jQuery) {
jQuery.browser = window.jQBrowser;
}

Expand Down