【发布时间】: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.navigator或globalThis.navigator,但是这两者都可以被隐藏,因此您仍然无法保证任何事情。 -
不,你没有在听:navigator 的许多属性甚至不能保证存在,所以你不能依赖它们,即使你想使用它们“只是用于 UI 目的”。你肯定会经常遇到它不存在的事实,所以不要围绕它编写代码。
Navigator是一个古老且大部分已弃用的对象,您可能应该检查MDN article for Navigator。对于navigator.platform,我们看到 (1) 它已被弃用,以及 (2) 文本“不要依赖此函数返回重要值”。 -
if (process.browser) console.log(window.navigator)
标签: javascript reactjs next.js navigator