美文网首页
JavaScript 判断浏览器类型/系统平台/渲染引擎

JavaScript 判断浏览器类型/系统平台/渲染引擎

作者: HyperLifelll9 | 来源:发表于2020-08-04 10:32 被阅读0次
    // 当前平台是否支持V8 Break Iterator。 V8检查对于检测所有基于Blink的浏览器是必需的。
    let hasV8BreakIterator;
    
    // 我们需要对`Intl`的引用进行尝试/捕获,因为在某些情况下访问它可能导致IE抛出异常。
    // 这些情况与Windows的特定版本有关,如果用户提供了一个多填充的“地图”,则可能会发生这种情况。参阅:
    // https://github.com/Microsoft/ChakraCore/issues/3189
    // https://github.com/angular/components/issues/15687
    try {
        hasV8BreakIterator = (typeof Intl !== 'undefined' && (Intl as any).v8BreakIterator);
    } catch {
        hasV8BreakIterator = false;
    }
    
    export class Platform {
        /** 当前浏览器是否为 Microsoft Edge */
        isEdge = /(edge)/i.test(navigator.userAgent);
    
        /** 当前渲染引擎是否为 Microsoft Trident. */
        isTrident = /(msie|trident)/i.test(navigator.userAgent);
    
        // EdgeHTML和Trident模拟了Blink特定的事情,需要从此检查中排除。
        /** 当前渲染引擎是否为 Blink. */
        isBlink = (!!((window as any).chrome || hasV8BreakIterator) && typeof CSS !== 'undefined' && !this.isEdge && !this.isTrident);
    
        // Webkit是EdgeHTML,Blink和Trident中userAgent的一部分。 因此,我们需要确保Webkit独立运行,并且不会用作其他引擎的基础。
        /** 当前渲染引擎是否为 WebKit. */
        isWebKit = /AppleWebKit/i.test(navigator.userAgent) && !this.isBlink && !this.isEdge && !this.isTrident;
    
        /** 当前系统平台是否为 Apple iOS. */
        isIos = /iPad|iPhone|iPod/.test(navigator.userAgent) && !('MSStream' in window);
    
        // 很难检测到普通的Gecko引擎,因为大多数浏览器将其自身识别为类似Gecko的浏览器并根据此内容修改userAgent。
        // 由于我们仅涵盖了一个明确的Firefox案例,因此我们可以简单地检查Firefox而无需进行不稳定的检查
        /** 当前浏览器是否为 Firefox. */
        isFirefox = /(firefox|minefield)/i.test(navigator.userAgent);
    
        // 移动端上的Trident将android平台添加到userAgent来欺骗检测。
        /** 当前系统平台是否为 Android. */
        isAndroid = /android/i.test(navigator.userAgent) && !this.isTrident;
    
        // Safari浏览器将在其userAgent中包含Safari关键字。
        // 一些浏览器可能会伪造此代码,而只是将Safari关键字放在userAgent中。
        // 为了更安全地使用Safari,每个Safari浏览器还应该使用Webkit作为其布局引擎。
        /** 当前浏览器是否为 Safari. */
        isSafari = /safari/i.test(navigator.userAgent) && this.isWebKit;
    }
    

    以上代码整理自 Angular CDK

    相关文章

      网友评论

          本文标题:JavaScript 判断浏览器类型/系统平台/渲染引擎

          本文链接:https://www.haomeiwen.com/subject/ptsprktx.html