Интерфейс WorkerNavigator представляет собой подмножество интерфейса Navigator, к которому разрешен доступ из Worker< /сильный>а>. Такой объект инициализируется для каждого работника и доступен через свойство WorkerGlobalScope.navigator, полученное вызовом window.self.navigator.
Интерфейс Worker API Web Workers представляет собой фоновую задачу. который может быть легко создан и может отправлять сообщения своему создателю. Создание рабочего процесса так же просто, как вызов конструктора Worker() и указание сценария, который будет выполняться в рабочем потоке.
запуск navigator на любой веб-странице вернет экземпляр Navigator.
>> navigator
Navigator { permissions: Permissions, mimeTypes: MimeTypeArray, plugins: PluginArray, doNotTrack: "unspecified", maxTouchPoints: 0, mediaCapabilities: MediaCapabilities, oscpu: "Intel Mac OS X 10.13", vendor: "", vendorSub: "", productSub: "20100101" }
запуск navigator внутри приложения react-native вернет экземпляр WorkerNavigator. WorkerNavigator — это фоновая задача.
>> navigator
WorkerNavigator { geolocation: Object, hardwareConcurrency: 4, appCodeName: "Mozilla", appName: "Netscape"… }
Интерфейс WorkerNavigator не полностью совместим/проверен со всеми браузерами. , но я тестировал функциональность на эмуляторе Iphone X, а navigator.geolocation это defined.

Несколько сообщений в stackoverflow жалуются на то, что Chrome или Safari возвращают WorkerNavigator geolocation undefined и, как объяснено в следующем ответе
navigator.geolocation принадлежит navigator в Chrome?
navigator.geolocation принадлежит navigator только в main thread, но не принадлежит navigator в worker thread.
два навигатора имеют независимые реализации на стороне C++. Вот почему navigator.geolocation не поддерживается в потоке worker.
Chromium включает отдельные интерфейсы для Navigator и WorkerNavigator Реализация C++.
Navigator является атрибутом DOMWindow, а WorkerNavigator является атрибутом WorkerGlobalScope.
Пользователи StackOverflow жалуются, что веб-воркер Chrome не имеет атрибута geolocation
Атрибут navigator интерфейса WorkerGlobalScope должен возвращать экземпляр интерфейса WorkerNavigator, который представляет идентификатор и состояние пользовательского агента (клиента):
[Exposed=Worker]
interface WorkerNavigator {};
WorkerNavigator includes NavigatorID;
WorkerNavigator includes NavigatorLanguage;
WorkerNavigator includes NavigatorOnLine;
WorkerNavigator includes NavigatorConcurrentHardware;
Метод geolocation не включен в WorkerNavigation и WorkerLocation интерфейсы
Navigator инициализируется для каждого рабочего процесса и доступен через свойство WorkerGlobalScope.navigator, полученное при вызове window.self.navigator.
как описано в WorkerNavigator a> API docs, он не включает метод geolocation().
Если у вас по-прежнему возникает эта проблема, вы можете следовать этому руководству и вручную создать свой worker и тестирование методов в разных браузерах.
navigator.permissions? для обнаружения поддержки геолокации
WorkerNavigator.permissions читать -only возвращает Permissions объект, который можно использовать для запроса и обновления статуса разрешений API, на которые распространяется API разрешений.
self.permissions.query({name:'notifications'}).then(function(result) {
if (result.state === 'granted') {
showNotification();
} else if (result.state === 'prompt') {
requestNotificationPermission()
}
});
Подробнее здесь
Действия по устранению проблемы
Вы запускаете console.log с инструментами react-native-debugger, и, возможно, вывод будет получен из вашего браузера Mac, а не из вашего телефона. Отключите debugging на своем эмуляторе и покажите нам вывод console.warn(navigator) и console.warn(navigator.geolocation)
appVersion: "5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103
Safari/537.36"
Как показано на изображении ниже, console.warn(navigator) возвращает объект WorkerNavigator в react-native-debugger-tools, а в эмуляторе возвращает {product:"ReactNative", "geolocation": {}}. React-native не будет отображать console.log внутри эмулятора.

- Вы экспериментируете с этой проблемой только на Iphone или еще и на Android?
вы неправильно импортируете объект geolocation поверх вашего компонента?
import { navigator } from ...
Знаете ли вы, что нативная библиотека геолокации предлагает гораздо более точный API и более широкий устройства поддерживают?
- Ваша проблема связана с тем, что какой-то браузер не полностью поддерживает
WorkerNavigator интерфейс. Вы не согласны с этим последним пунктом и можете ли вы предоставить нам некоторые доказательства того, что мы ошибаемся. React-Native использует API браузера для запуска geolocation в фоновом режиме. Вы можете воссоздать тот же сценарий в своем iphone emulator safari developer console, следуя этим инструкциям, чтобы создать WorkerNavigator экземпляр, а затем получить ваше местоположение. Вы можете продемонстрировать работу WorkerNavigator в своих браузерах Emulator Safari/Chrome.
- Рассматривали ли вы возможность создания задачи на
w3c/geolocation-api репозиторий? Рассматривали ли вы возможность открыть отчет об ошибке в chromium?
13.05.2019
navigator.geolocation, но он не определен. 15.05.2019console.warn(navigator)иconsole.warn(navigator.geolocation)с отключенными инструментамиreact-native-debugger. Предоставьте мне любые дополнительные отзывы, которые помогут вам решить эту проблему. Спасибо 15.05.2019