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

won*_*ng2 50 javascript google-chrome-extension

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

ser*_*erg 78

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

  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"});
Run Code Online (Sandbox Code Playgroud)

  • 使用[`chrome.runtime.id`](https://developer.chrome.com/extensions/runtime.html#property-id). (10认同)
  • `chrome.runtime.id`只能在后台页面中使用吗?我正在尝试使用它,它不能正常页面工作. (3认同)

Wes*_*son 9

如果你正在做本地化的事情,看起来扩展机制提供了一些占位符来访问你的扩展ID:

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

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


Phi*_*ßen 5

在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"
Run Code Online (Sandbox Code Playgroud)

对于fetch扩展中的请求,Firefox将添加标题

origin: moz-extension://e3225586-81a0-47c3-8612-d95fb0c2a609
Run Code Online (Sandbox Code Playgroud)

示例2:Chrome中的Ghostery

chrome.runtime.id                        --> "mlomiejdfkolichcflejclcbmpeaniij"
chrome.i18n.getMessage("@@extension_id") --> "mlomiejdfkolichcflejclcbmpeaniij" 
Run Code Online (Sandbox Code Playgroud)

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

origin: chrome-extension://mlomiejdfkolichcflejclcbmpeaniij
Run Code Online (Sandbox Code Playgroud)