Как я могу узнать, является ли браузер Chrome против Firefox из всплывающего веб-расширения JavaScript? - PullRequest
1 голос
/ 07 апреля 2020

Я использую пространство имен chrome как для Chrome, так и для Firefox, но хотел бы знать, в каком браузере работает веб-расширение.

Ответы [ 2 ]

2 голосов
/ 07 апреля 2020
  • Проверка chrome.app, отсутствующая в Firefox:

    const isFirefox = !chrome.app;
    
  • Проверка browser, отсутствующая в Chrome:

    const isFirefox = window.browser && browser.runtime;
    

    (дополнительная проверка состоит в том, чтобы избежать ложных срабатываний на страницах с элементом с id="browser", который создает именованное свойство для window объекта для этого элемента)

  • Использование асинхронного browser.runtime.getBrowserInfo .

PS navigator.userAgent может быть изменено во время отладки в devtools при переключении в режим устройства или через about:config опция в Firefox, так что это ненадежный источник.

0 голосов
/ 07 апреля 2020

Это то, что я делаю в своих собственных расширениях для проверки Firefox (FF) против Chrome:

const FF = typeof browser !== 'undefined';

Обновление: (1)
Здесь является объяснением .....

Я использую пространство имен chrome для Chrome и Firefox, но хотел бы знать, в каком браузере запущено расширение сети.

AFA Я понимаю, вопрос касается кода расширения, а не кода контента. Я использую приведенный выше код в фоновом скрипте в "firefox-webextensions" или "google-chrome-extension" фоновом скрипте.

С этого момента код будет выглядеть следующим образом:

if (FF) {...}
else { .... }

После создания скрипт содержимого не имеет к нему никакого отношения.

В случае разработчика, который каким-то образом решит использовать id="browser" затем может быть добавлен еще один шаг, который возвращает логическое значение true|false например

const FF = typeof browser !== 'undefined' && !!browser.runtime;

Ничего не стоит, что следующее возвращает object или undefined, а не логическое значение

const isFirefox = window.browser && browser.runtime;

Хотя он работает нормально в условных выражениях if(), он не будет работать в других ситуациях, когда потребуется логическое значение (например, switch)

(1) Примечание: Подчеркивая ответы, отговаривает людей тратить время и усилия на ответы на вопросы в будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...