Как получить идентификатор моего расширения из JavaScript?

Я пишу расширение для Chrome, мне нужно получить идентификатор своего расширения в своем коде, поэтому мне не нужно каждый раз менять его вручную. Как я могу это сделать?

3 ответа

Решение

Вы можете получить его так (без дополнительных разрешений) двумя различными способами:

  1. Используя API времени выполнения: var myid = chrome.runtime.id;

  2. Использование i18n api: var myid = chrome.i18n.getMessage("@@extension_id");

но вам не нужно это для открытия страниц, как chrome.tabs.create() (и некоторые другие) понимают относительные пути.

Так чтобы открыть index.html из вашей папки расширения вы должны просто использовать:

chrome.tabs.create({url: "index.html"});

В WebExtensions у вас есть два варианта:

  1. chrome.runtime.id
  2. chrome.i18n.getMessage("@@extension_id")

В Chrome и Opera они будут возвращать одно и то же значение, но в Firefox есть разница.

В Firefox chrome.runtime.id вернет так называемый "ID расширения", но chrome.i18n.getMessage("@@extension_id") вернет "Внутренний UUID". Идентификатор расширения одинаков для всех пользователей, но внутренний UUID создается при установке расширения и является уникальным для каждого пользователя.

В зависимости от контекста идентификатор расширения не будет тем, что вы хотите. Например, Firefox использует внутренний UUID для заполнения origin заголовок, а не идентификатор расширения.

Пример 1: Ghostery в Firefox 61

chrome.runtime.id                        --> "firefox@ghostery.com"
chrome.i18n.getMessage("@@extension_id") --> "e3225586-81a0-47c3-8612-d95fb0c2a609"

За fetch запросы изнутри расширения, Firefox добавит заголовок

origin: moz-extension://e3225586-81a0-47c3-8612-d95fb0c2a609

Пример 2: Призрак в Хроме

chrome.runtime.id                        --> "mlomiejdfkolichcflejclcbmpeaniij"
chrome.i18n.getMessage("@@extension_id") --> "mlomiejdfkolichcflejclcbmpeaniij" 

За fetch запросы изнутри расширения, Chrome добавит заголовок

origin: chrome-extension://mlomiejdfkolichcflejclcbmpeaniij

Если вы делаете что-то с локализацией, похоже, что механика расширений предлагает некоторые заполнители для доступа к вашему идентификатору расширения:

Если вы просто пытаетесь получить доступ к URL для локальных файлов вашего расширения, вы можете просто использовать chrome.extension.getURL("some file name");

Если у вас есть еще одна причина для того, чтобы действительно знать идентификатор расширения, я не уверен, что есть прямой способ получить его из самого расширения. Два пути, которые приходят ко мне с макушки головы, используют chrome.extension.getURL("some file name") а затем анализировать идентификатор расширения из этого возвращенного URL - или с помощью chrome.management.getAll() и перебирая все установленные расширения, пока вы не найдете свой, использующий совпадение на name а затем доступ к id:

Другие вопросы по тегам