有没有办法用React检测IE浏览器,或者重定向到某个页面,或者给出任何有用的消息.我在JavaScript中找到了一些东西,但不确定如何将其用于React+TypeScript.

var isEdge = !isIE && !!window.StyleMedia;

推荐答案

你已经走上了正确的道路,你可以使用这些来有条件地呈现jsx或帮助路由...

我已经成功地使用了以下方法.

最初是-How to detect Safari, Chrome, IE, Firefox and Opera browser?

// Opera 8.0+
const isOpera = (!!window.opr && !!opr.addons) || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;

// Firefox 1.0+
const isFirefox = typeof InstallTrigger !== 'undefined';

// Safari 3.0+ "[object HTMLElementConstructor]" 
const isSafari = /constructor/i.test(window.HTMLElement) || (function (p) { return p.toString() === "[object SafariRemoteNotification]"; })(!window['safari'] || (typeof safari !== 'undefined' && safari.pushNotification));

// Internet Explorer 6-11
const isIE = /*@cc_on!@*/false || !!document.documentMode;

// Edge 20+
const isEdge = !isIE && !!window.StyleMedia;

// Chrome 1 - 71
const isChrome = !!window.chrome && (!!window.chrome.webstore || !!window.chrome.runtime);

// Blink engine detection
const isBlink = (isChrome || isOpera) && !!window.CSS;

请注意,由于浏览器更改,它们都有可能被弃用.

我用它们来做如下react :

 content(props){
    if(!isChrome){
     return (
      <Otherjsxelements/>
     )
    }
    else { 
     return (
      <Chromejsxelements/>
     )
    }
  }

然后在我的主组件中调用{this.Content()}来呈现不同的浏览器特定元素.

伪代码可能看起来像这样...(未经测试):

import React from 'react';

const isChrome = !!window.chrome && (!!window.chrome.webstore || !!window.chrome.runtime);

export default class Test extends React.Component {

  content(){
    if(isChrome){
        return (
            <div>Chrome</div>
        )
    } else {
        return (
            <div>Not Chrome</div>
        )
    }
  }

    render() {
        return (
            <div>Content to be seen on all browsers</div>
            {this.content()}
        )
    }
}

Typescript相关问答推荐

如何在Jest中嘲笑location.back()方法调用进行Angular 组件测试?

如何传递基于TypScript中可变类型的类型?

在TypeScript中,除了映射类型之外还使用的`in`二进制运算符?

如何在Type脚本中动态扩展函数的参数类型?

从TypeScrip中的其他类型检索泛型类型

Cypress页面对象模型模式.扩展Elements属性

获取一个TypeScrip对象,并将每个属性转换为独立对象的联合

不带其他属性的精确函数返回类型

如何从输入中删除值0

为什么我在这个重载函数中需要`as any`?

对象类型的TypeScrip隐式索引签名

有没有办法防止类型交集绕过联合类型限制?

创建Angular 为17的动态形状时出错

为什么特定的字符串不符合包括该字符串的枚举?

使用Type脚本更新对象属性

如何在Angular /字体中访问API响应的子元素?

为什么数字是`{[key:string]:UNKNOWN;}`的有效密钥?

窄SomeType与SomeType[]

如何在由函数参数推断的记录类型中具有多个对象字段类型

是否可以使用元组中对象的键来映射类型