【问题标题】:React JS - How to detect navigator.platform in Next JSReact JS - 如何在 Next JS 中检测 navigator.platform
【发布时间】:2023-03-08 16:01:01
【问题描述】:

我正在用 React 在 Next JS 中编写一个小函数。当我使用导航器时,我收到以下错误。

ReferenceError: navigator is not defined

这是我的代码:

import React from "react";

export default function App() {

const isMac = navigator.platform.toUpperCase().indexOf("MAC") >= 0;

  return (
   {isMac ? "I'm mac" : "I'm windows"}
  );
}

如何获取浏览器平台,然后基于该平台呈现部分?

【问题讨论】:

  • 当然第一个问题应该是:“为什么?”因为几乎没有任何东西需要了解操作系统,并且浏览器 100% 被允许对导航器对象中的任何内容撒谎,因为navigator 包含大量数据,跟踪公司可以使用这些数据对您进行指纹识别,以便他们可以在所有网站上跟踪您。
  • @Mike'Pomax'Kamermans 我明白了这一点,但如果我需要运行它并基于它显示一些东西,我该怎么做。搜索了一个多小时..但没有找到解决方案。
  • 简短的回答是“你不需要”,浏览器不必告诉你它们运行在什么操作系统上,所以你不能依赖这些信息。您可以尝试正确命名您的呼叫,例如 window.navigatorglobalThis.navigator,但是这两者都可以被隐藏,因此您仍然无法保证任何事情。
  • 不,你没有在听:navigator 的许多属性甚至不能保证存在,所以你不能依赖它们,即使你想使用它们“只是用于 UI 目的”。你肯定会经常遇到它不存在的事实,所以不要围绕它编写代码。 Navigator 是一个古老且大部分已弃用的对象,您可能应该检查MDN article for Navigator。对于 navigator.platform,我们看到 (1) 它已被弃用,以及 (2) 文本“不要依赖此函数返回重要值”。
  • if (process.browser) console.log(window.navigator)

标签: javascript reactjs next.js navigator


【解决方案1】:

基本上,这就是我需要写的。

const isMac = typeof window !== 'undefined' ? navigator.platform.toUpperCase().indexOf("MAC") >= 0 : false;

【讨论】:

    猜你喜欢
    • 2020-09-02
    • 2021-11-20
    • 2022-07-29
    • 2021-03-02
    • 1970-01-01
    • 1970-01-01
    • 2019-06-18
    • 2020-10-11
    • 2020-07-18
    相关资源
    最近更新 更多