Browser Detection in ReactJS

前端 未结 7 1729
甜味超标
甜味超标 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 22:49

    Not sure why but nobody mentioned this package: react-device-detect The package have a lot browsers checks, plus versions and some other info related. It's really small and it's updated.

    You can use:

    import { isIE } from 'react-device-detect';
    isIE // returns true or false
    

    react-device-detect it's also very small bundlephobia link

    0 讨论(0)
  • 2020-12-04 22:49

    You can write test for IE like this.

    <script>
         // Internet Explorer 6-11
              const isIE = document.documentMode;
              if (isIE){
                window.alert(
                  "Your MESSAGE here."
                )
              }
    </script>
    
    0 讨论(0)
  • 2020-12-04 22:50

    This is all information you can get from your the browser of you client (using react):

        let latitude
        let longitude
        const location = window.navigator && window.navigator.geolocation
    
        if (location) {
          location.getCurrentPosition(position => {
            latitude = position.coords.latitude
            longitude = position.coords.longitude
          })
        }
    
        var info = {
          timeOpened: new Date(),
          timezone: new Date().getTimezoneOffset() / 60,
          pageon: window.location.pathname,
          referrer: document.referrer,
          previousSites: window.history.length,
          browserName: window.navigator.appName,
          browserEngine: window.navigator.product,
          browserVersion1a: window.navigator.appVersion,
          browserVersion1b: navigator.userAgent,
          browserLanguage: navigator.language,
          browserOnline: navigator.onLine,
          browserPlatform: navigator.platform,
          javaEnabled: navigator.javaEnabled(),
          dataCookiesEnabled: navigator.cookieEnabled,
          dataCookies1: document.cookie,
          dataCookies2: decodeURIComponent(document.cookie.split(';')),
          dataStorage: localStorage,
          sizeScreenW: window.screen.width,
          sizeScreenH: window.screen.height,
          sizeDocW: window.document.width,
          sizeDocH: window.document.height,
          sizeInW: window.innerWidth,
          sizeInH: window.innerHeight,
          sizeAvailW: window.screen.availWidth,
          sizeAvailH: window.screen.availHeight,
          scrColorDepth: window.screen.colorDepth,
          scrPixelDepth: window.screen.pixelDepth,
          latitude,
          longitude
        }
        console.log(info)
    
    

    The browser is browserName

    0 讨论(0)
  • 2020-12-04 23:01

    This almost broke me, but I found something which seems pretty simple and straight forward, use the vendor name. ie. Google, Apple etc. navigator.vendor.includes('Apple') I hope this helps someone out there.

    0 讨论(0)
  • 2020-12-04 23:02

    This is the service I always use when doing JS/Browser based browser-detection: http://is.js.org/

    if (is.ie() || is.edge()) {
      window.location.href = 'http://example.com';
    }
    
    0 讨论(0)
  • 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 (
          <Otherjsxelements/>
         )
        }
        else { 
         return (
          <Chromejsxelements/>
         )
        }
      }
    

    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 (
                <div>Chrome</div>
            )
        } else {
            return (
                <div>Not Chrome</div>
            )
        }
      }
    
        render() {
            return (
                <div>Content to be seen on all browsers</div>
                {this.content()}
            )
        }
    }
    
    0 讨论(0)
提交回复
热议问题