我正在撰写Chrome扩展程序,我需要在我的代码中获取扩展程序的ID,因此我不需要每次都手动更改它。我怎么能这样做?
答案 0 :(得分:72)
你可以用两种不同的方式得到它(不需要额外的权限):
使用运行时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"});
答案 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中,您有两个选择:
chrome.runtime.id
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