#javascript #reactjs #next.js #navigator
#javascript #reactjs #next.js #навигатор
Вопрос:
Я пишу небольшую функцию в следующем JS с помощью react. Когда я использую navigator, я получаю следующую ошибку.
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"}
);
}
Как мне получить платформу браузера, а затем отобразить раздел на основе этого?
Комментарии:
1. Конечно, самый первый вопрос здесь должен быть: «почему?» потому что почти ничего не требует знания ОС, а браузерам на 100% разрешено лгать обо всем и обо всем в объекте navigator, потому
navigator
что содержит множество данных, которые могут быть использованы отслеживающими компаниями для снятия отпечатков пальцев, чтобы они могли отслеживать вас на всех веб-сайтах.2. @Mike’Pomax’Camermans Я понял это, но если мне нужно это запустить и показать что-то на основе этого, как бы я это сделал. Искал больше часа .. но решение не найдено.
3. Короткий ответ: «вы этого не делаете», браузеры не должны сообщать вам, на какой ОС они работают, поэтому вы не можете полагаться на наличие этой информации. Вы могли бы попытаться правильно указать пространство имен вашего вызова, so
window.navigator
илиglobalThis.navigator
, но оба они могут быть затенены, поэтому вам все равно ничего не гарантировано.4. Нет, вы не слушаете: многие свойства navigator даже не гарантированы, поэтому вы не можете полагаться на них , даже если хотите использовать их «только для целей пользовательского интерфейса». Вы гарантированно будете часто сталкиваться с тем фактом, что его там не будет, поэтому не пишите код вокруг него.
Navigator
это древний и в основном устаревший объект, и вам, вероятно, следует проверить статью MDN для Navigator . Напримерnavigator.platform
, мы видим, что (1) он устарел и (2) текст «Не полагайтесь на эту функцию для возврата значительного значения».5.
if (process.browser) console.log(window.navigator)
Ответ №1:
По сути, это то, что мне нужно написать.
const isMac = typeof window !== 'undefined' ? navigator.platform.toUpperCase().indexOf("MAC") >= 0 : false;