当前位置: 首页 > 面试题库 >

如果不支持用户的浏览器,是否可以显示警告消息?

曾新
2023-03-14
问题内容

我正在开发一个 React 应用程序,如果用户的旧浏览器不支持 (例如IE 9) ,客户希望它显示一条特殊消息。

很久以来,我一直试图使用react-device-detectpackage 检测一些“流行的”旧浏览器。

src / index.js

import { browserName, browserVersion } from "react-device-detect";

const render = Component => {
  if (browserName === "IE" && browserVersion < 10) {
    ReactDOM.render(<UnsupportedBrowser />, document.getElementById("root"));
  } else {
    ReactDOM.render(
      <AppContainer>
        <Component store={store} history={history} />
      </AppContainer>,
      document.getElementById("root")
    );
  }
};

并添加条件注释:

public / index.html

<!--[if lte IE 9]>
  Please upgrade your browser
<![endif]-->

但是我怀疑,有更好的方法可以做到,这是我在网上找不到的。


问题答案:

我发现了很多JS脚本来检测用户的浏览器名称和版本,因此我不得不将它们混合在一起以获得我想要的东西

public / index.html

<script type="text/javascript">
    function get_browser() {
      var ua = navigator.userAgent, tem, M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
      if (/trident/i.test(M[1])) {
        tem = /\brv[ :]+(\d+)/g.exec(ua) || [];
        return { name: 'IE', version: (tem[1] || '') };
      }
      if (M[1] === 'Chrome') {
        tem = ua.match(/\bOPR\/(\d+)/)
        if (tem != null) { return { name: 'Opera', version: tem[1] }; }
      }
      if (window.navigator.userAgent.indexOf("Edge") > -1) {
        tem = ua.match(/\Edge\/(\d+)/)
        if (tem != null) { return { name: 'Edge', version: tem[1] }; }      
      }
      M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];
      if ((tem = ua.match(/version\/(\d+)/i)) != null) { M.splice(1, 1, tem[1]); }
      return {
        name: M[0],
        version: +M[1]
      };
    }

    var browser = get_browser()
    var isSupported = isSupported(browser);

    function isSupported(browser) {
      var supported = false;
      if (browser.name === "Chrome" && browser.version >= 48) {
        supported = true;
      } else if ((browser.name === "MSIE" || browser.name === "IE") && browser.version >= 10) {
        supported = true;
      } else if (browser.name === "Edge") {
        supported = true;
      }
      return supported;
    }

    if (!isSupported) {
      document.write(<h1>My message</h1>)
    }
  </script>

如果他们的浏览器是chrome> = 48或大于等于10或任何版本的edge,则该脚本允许用户继续。否则,它会显示一条特殊消息,要求用户更新或更改其浏览器。

您还可以修改isSupported()函数来根据需要自定义此脚本。



 类似资料:
  • 本文向大家介绍js判断浏览器是否支持html5,包括了js判断浏览器是否支持html5的使用技巧和注意事项,需要的朋友参考一下 现在HTML5似乎慢慢流行起来了,有些前端高手为了兼容考虑,会在网页中添加对客户端浏览器判断的代码,知道用户浏览器是否支持HTML5,下面分享想我自己使用的2种方法 方法一, 方法二, 方法三: 有更好的方法的话,请联系我!谢谢

  • 问题内容: javascript中是否有办法获取浏览器可以显示的所有字体(或字体家族)的名称?(我想为用户提供一个包含所有可用字体的列表的下拉列表,并允许用户选择一种字体。)我不想不必事先对该列表进行硬编码或从服务器发送下来。(直觉上,似乎浏览器应该知道它拥有什么字体,并且应该以某种方式将其公开给javascript。) 问题答案: JavaScript版本有点片状。它通过迭代已知的字体和测试来获

  • Docusaurus 允许网站通过 浏览器列表配置(browserslist configuration) 来定义其要支持的所有浏览器。 目的 网站需要在向后兼容性和文件体积之间做平衡。由于旧的浏览器不支持现代的 API 或语法,因此需要更多代码才能实现相同的功能,这会增加网站的加载时间,从而对所有其他用户造成不利的影响。为权衡起见,Docusaurus 打包工具仅支持浏览器列表中所定义的浏览器版

  • 把jade编译为一个可供浏览器使用的单文件,只需要简单的执行: $ make jade.js 如果你已经安装了uglifyjs (npm install uglify-js),你可以执行下面的命令它会生成所有的文件。其实每一个正式版本里都帮你做了这事。 $ make jade.min.js 默认情况下,为了方便调试Jade会把模板组织成带有形如 __.lineno = 3 的行号的形式。 在浏览器

  • Next.js 支持 IE11 和所有的现代浏览器使用了@babel/preset-env。为了支持 IE11,Next.js 需要全局添加Promise的 polyfill。有时你的代码或引入的其他 NPM 包的部分功能现代浏览器不支持,则需要用 polyfills 去实现。 ployflls 实现案例为polyfills。

  • AdminLTE 与 Bootstrap 4 支持的浏览器一样。Bootstrap 支持 主流平台和浏览器,稳定版在 Windows 上,我们支持 Internet Explorer 10-11 / Microsoft Edge。更多详细信息,请点击此处。 你可以在 我们的 .browserslistrc 文件 找到支持的浏览器情况及其版本: # https://github.com/browse