如何从JavaScript获取我的扩展程序ID?

时间:2011-06-16 13:59:08

标签: javascript google-chrome-extension

我正在撰写Chrome扩展程序,我需要在我的代码中获取扩展程序的ID,因此我不需要每次都手动更改它。我怎么能这样做?

3 个答案:

答案 0 :(得分:72)

你可以用两种不同的方式得到它(不需要额外的权限):

  1. 使用运行时api:var myid = chrome.runtime.id;

  2. 使用i18n api:var myid = chrome.i18n.getMessage("@@extension_id");

  3. 但是你不需要它来打开页面,因为chrome.tabs.create()(和其他一些人)理解相对路径。

    因此,要从您的扩展程序文件夹中打开index.html,您应该使用:

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

答案 1 :(得分:9)

如果您正在使用本地化,看起来扩展机制会提供一些placeholders来访问您的扩展ID:

如果您只是尝试访问扩展程序的本地文件的网址,则可以使用chrome.extension.getURL("some file name");

如果您有其他理由需要知道扩展程序的ID,我不确定是否有直接的方式从扩展程序本身获取它。从我头脑中找到的两种方法是使用chrome.extension.getURL("some file name"),然后从返回的URL解析扩展ID - 或使用chrome.management.getAll()并循环浏览所有已安装的扩展,直到找到你的使用name上的匹配然后访问id

答案 2 :(得分:2)

在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”。扩展名ID对于所有用户都相同,但是内部UUID是在安装扩展名时创建的,并且每个用户唯一。

取决于上下文,扩展名ID可能不是您想要的。例如,Firefox使用内部UUID填充origin标头,而不是扩展名ID。

示例1:Firefox 61中的Ghostery

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中的Ghostery

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

对于扩展程序中的fetch个请求,Chrome将添加标头

origin: chrome-extension://mlomiejdfkolichcflejclcbmpeaniij