Browser Detection in ReactJS

前端 未结 7 1748
甜味超标
甜味超标 2020-12-04 22:20

Is there any way to detect IE browser with React and either redirect to a page or give any helpful message. I found something in JavaScript, but not sure how would I use it

7条回答
  •  忘掉有多难
    2020-12-04 23:03

    You are on the right track you can use these to conditionally render jsx or help with routing...

    I have used the following with great success.

    Originally from - 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;
    

    Please be aware they each stand a chance to deprecated due to browser changes.

    I use them in React like this:

     content(props){
        if(!isChrome){
         return (
          
         )
        }
        else { 
         return (
          
         )
        }
      }
    

    Then by calling {this.Content()} in my main component to render the different browser specific elements.

    Pseudo code might look something like this... (untested):

    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 (
                
    Chrome
    ) } else { return (
    Not Chrome
    ) } } render() { return (
    Content to be seen on all browsers
    {this.content()} ) } }

提交回复
热议问题