Как получить идентификатор моего расширения из JavaScript?
Я пишу расширение для Chrome, мне нужно получить идентификатор своего расширения в своем коде, поэтому мне не нужно каждый раз менять его вручную. Как я могу это сделать?
3 ответа
Вы можете получить его так (без дополнительных разрешений) двумя различными способами:
Используя API времени выполнения:
var myid = chrome.runtime.id;
Использование i18n api:
var myid = chrome.i18n.getMessage("@@extension_id");
но вам не нужно это для открытия страниц, как chrome.tabs.create()
(и некоторые другие) понимают относительные пути.
Так чтобы открыть index.html
из вашей папки расширения вы должны просто использовать:
chrome.tabs.create({url: "index.html"});
В WebExtensions у вас есть два варианта:
chrome.runtime.id
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
: