import { Injectable, Inject, Component } from '@angular/core'; import { Browser } from './Browser'; /** * * 提供行內資訊系統共用的服務函式,可減少程式開發時間 * * @author:GYC */ @Injectable() export class EsbService { /** * detect IE * returns version of IE or false, if browser is not Internet Explorer */ detectIE() { let ua = window.navigator.userAgent; // Test values; Uncomment to check result … // IE 10 // ua = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)'; // IE 11 // ua = 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko'; // Edge 12 (Spartan) // ua = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0'; // Edge 13 // ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586'; let msie = ua.indexOf('MSIE '); if (msie > 0) { // IE 10 or older => return version number return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10); } let trident = ua.indexOf('Trident/'); if (trident > 0) { // IE 11 => return version number let rv = ua.indexOf('rv:'); return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10); } let edge = ua.indexOf('Edge/'); if (edge > 0) { // Edge (IE 12+) => return version number return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10); } // other browser return false; } /** * 取得瀏覽器物件
* 瀏覽器名稱(IE Chrome Safari Opera Firefox)
* browser.fullVersion 瀏覽器版本 * @author:GYC */ public getBrowser(): Browser { let IsMicrofotBrowserversion = this.detectIE(); if (IsMicrofotBrowserversion === false) { let nVer = navigator.appVersion; let nAgt = navigator.userAgent; let browserName = navigator.appName; let fullVersion = '' + parseFloat(navigator.appVersion); let majorVersion = parseInt(navigator.appVersion, 10); let nameOffset, verOffset, ix; // In Opera 15+, the true version is after "OPR/" if ((verOffset = nAgt.indexOf("OPR/")) != -1) { browserName = "Opera"; fullVersion = nAgt.substring(verOffset + 4); } // In older Opera, the true version is after "Opera" or after // "Version" else if ((verOffset = nAgt.indexOf("Opera")) != -1) { browserName = "Opera"; fullVersion = nAgt.substring(verOffset + 6); if ((verOffset = nAgt.indexOf("Version")) != -1) fullVersion = nAgt.substring(verOffset + 8); } // In Chrome, the true version is after "Chrome" else if ((verOffset = nAgt.indexOf("Chrome")) != -1) { browserName = "Chrome"; fullVersion = nAgt.substring(verOffset + 7); } // In Safari, the true version is after "Safari" or after // "Version" else if ((verOffset = nAgt.indexOf("Safari")) != -1) { browserName = "Safari"; fullVersion = nAgt.substring(verOffset + 7); if ((verOffset = nAgt.indexOf("Version")) != -1) fullVersion = nAgt.substring(verOffset + 8); } // In Firefox, the true version is after "Firefox" else if ((verOffset = nAgt.indexOf("Firefox")) != -1) { browserName = "Firefox"; fullVersion = nAgt.substring(verOffset + 8); } // In most other browsers, "name/version" is at the end of // userAgent else if ((nameOffset = nAgt.lastIndexOf(' ') + 1) < (verOffset = nAgt.lastIndexOf('/'))) { browserName = nAgt.substring(nameOffset, verOffset); fullVersion = nAgt.substring(verOffset + 1); if (browserName.toLowerCase() == browserName.toUpperCase()) { browserName = navigator.appName; } } // trim the fullVersion string at semicolon/space if present if ((ix = fullVersion.indexOf(";")) != -1) fullVersion = fullVersion.substring(0, ix); if ((ix = fullVersion.indexOf(" ")) != -1) fullVersion = fullVersion.substring(0, ix); majorVersion = parseInt('' + fullVersion, 10); if (isNaN(majorVersion)) { fullVersion = '' + parseFloat(navigator.appVersion); majorVersion = parseInt(navigator.appVersion, 10); } let browser: Browser = { name: browserName, fullVersion: fullVersion } return browser; } else if (IsMicrofotBrowserversion >= 12) { return { name: "Edge", fullVersion: "" + IsMicrofotBrowserversion }; } else if (IsMicrofotBrowserversion < 12) { return { name: "IE", fullVersion: "" + IsMicrofotBrowserversion }; } } }