phaser
Version:
A fast, free and fun HTML5 Game Framework for Desktop and Mobile web browsers from the team at Phaser Studio Inc.
187 lines (160 loc) • 5.19 kB
JavaScript
/**
* @author Richard Davey <rich@phaser.io>
* @copyright 2013-2025 Phaser Studio Inc.
* @license {@link https://opensource.org/licenses/MIT|MIT License}
*/
/**
* Determines the operating system of the device running this Phaser Game instance.
* These values are read-only and populated during the boot sequence of the game.
* They are then referenced by internal game systems and are available for you to access
* via `this.sys.game.device.os` from within any Scene.
*
* @typedef {object} Phaser.Device.OS
* @since 3.0.0
*
* @property {boolean} android - Is running on android?
* @property {boolean} chromeOS - Is running on chromeOS?
* @property {boolean} cordova - Is the game running under Apache Cordova?
* @property {boolean} crosswalk - Is the game running under the Intel Crosswalk XDK?
* @property {boolean} desktop - Is running on a desktop?
* @property {boolean} ejecta - Is the game running under Ejecta?
* @property {boolean} electron - Is the game running under GitHub Electron?
* @property {boolean} iOS - Is running on iOS?
* @property {boolean} iPad - Is running on iPad?
* @property {boolean} iPhone - Is running on iPhone?
* @property {boolean} kindle - Is running on an Amazon Kindle?
* @property {boolean} linux - Is running on linux?
* @property {boolean} macOS - Is running on macOS?
* @property {boolean} node - Is the game running under Node.js?
* @property {boolean} nodeWebkit - Is the game running under Node-Webkit?
* @property {boolean} webApp - Set to true if running as a WebApp, i.e. within a WebView
* @property {boolean} windows - Is running on windows?
* @property {boolean} windowsPhone - Is running on a Windows Phone?
* @property {number} iOSVersion - If running in iOS this will contain the major version number.
* @property {number} pixelRatio - PixelRatio of the host device?
*/
var OS = {
android: false,
chromeOS: false,
cordova: false,
crosswalk: false,
desktop: false,
ejecta: false,
electron: false,
iOS: false,
iOSVersion: 0,
iPad: false,
iPhone: false,
kindle: false,
linux: false,
macOS: false,
node: false,
nodeWebkit: false,
pixelRatio: 1,
webApp: false,
windows: false,
windowsPhone: false
};
function init ()
{
if (typeof importScripts === 'function')
{
return OS;
}
var ua = navigator.userAgent;
if ((/Windows/).test(ua))
{
OS.windows = true;
}
else if ((/Mac OS/).test(ua) && !((/like Mac OS/).test(ua)))
{
// Because iOS 13 identifies as Mac OS:
if (navigator.maxTouchPoints && navigator.maxTouchPoints > 2)
{
OS.iOS = true;
OS.iPad = true;
(navigator.appVersion).match(/Version\/(\d+)/);
OS.iOSVersion = parseInt(RegExp.$1, 10);
}
else
{
OS.macOS = true;
}
}
else if ((/Android/).test(ua))
{
OS.android = true;
}
else if ((/Linux/).test(ua))
{
OS.linux = true;
}
else if ((/iP[ao]d|iPhone/i).test(ua))
{
OS.iOS = true;
(navigator.appVersion).match(/OS (\d+)/);
OS.iOSVersion = parseInt(RegExp.$1, 10);
OS.iPhone = ua.toLowerCase().indexOf('iphone') !== -1;
OS.iPad = ua.toLowerCase().indexOf('ipad') !== -1;
}
else if ((/Kindle/).test(ua) || (/\bKF[A-Z][A-Z]+/).test(ua) || (/Silk.*Mobile Safari/).test(ua))
{
OS.kindle = true;
// This will NOT detect early generations of Kindle Fire, I think there is no reliable way...
// E.g. "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us; Silk/1.1.0-80) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 Silk-Accelerated=true"
}
else if ((/CrOS/).test(ua))
{
OS.chromeOS = true;
}
if ((/Windows Phone/i).test(ua) || (/IEMobile/i).test(ua))
{
OS.android = false;
OS.iOS = false;
OS.macOS = false;
OS.windows = true;
OS.windowsPhone = true;
}
var silk = (/Silk/).test(ua);
if (OS.windows || OS.macOS || (OS.linux && !silk) || OS.chromeOS)
{
OS.desktop = true;
}
// Windows Phone / Table reset
if (OS.windowsPhone || (((/Windows NT/i).test(ua)) && ((/Touch/i).test(ua))))
{
OS.desktop = false;
}
// WebApp mode in iOS
if (navigator.standalone)
{
OS.webApp = true;
}
if (typeof importScripts !== 'function')
{
if (window.cordova !== undefined)
{
OS.cordova = true;
}
if (window.ejecta !== undefined)
{
OS.ejecta = true;
}
}
if (typeof process !== 'undefined' && process.versions && process.versions.node)
{
OS.node = true;
}
if (OS.node && typeof process.versions === 'object')
{
OS.nodeWebkit = !!process.versions['node-webkit'];
OS.electron = !!process.versions.electron;
}
if ((/Crosswalk/).test(ua))
{
OS.crosswalk = true;
}
OS.pixelRatio = window['devicePixelRatio'] || 1;
return OS;
}
module.exports = init();