首先是一个小背景
我的任务是创建一个“程序”,可以在一天中的特定时间截取网页截图,并将图像保存到用户可以访问的文件夹中。我最初的想法是创建一个扩展来完成这项工作,但我很快意识到扩展无法访问文件系统,因此我转向使用可以使用fileSystem API的chrome应用程序。但是,chrome应用程序无法访问截取当前页面所需的功能,因此我最终创建了两个:扩展程序获取屏幕截图并将其blob发送到应用程序,并将其保存到文件系统。这个过程有点令人费解,但就像魅力一样。
现在,app / extension通过chrome Message Passing API进行通信。为了进行通信,我需要事先知道扩展或应用程序的ID。到目前为止,我已对硬件进行了硬编码,但考虑到每次安装扩展程序或应用程序时这些ID都会发生变化,我需要更好的方法。
现在问题
因此问题是:从chrome扩展程序中获取chrome应用程序ID的推荐方法是什么,反之亦然?现在的计划是使用chrome.management API并执行以下操作:
在扩展程序
var APP_NAME = "Name of My App";
var _appId;
...
function initializeAppId() {
// must declare the "management" permission in the manifest
chrome.management.getAll(function(result) {
for (var i=0; i<result.length; i++) {
if (result[i].name == APP_NAME) {
_appId = result[i].id;
}
}
});
}
这是怎么回事?我仍然需要硬编码应用程序的名称,但这并不像硬编码其ID那样悲惨。此外,打包的应用程序无法访问管理API,所以如果我走这条路线,我只能从扩展程序中执行此操作。获得应用ID后,我可以向应用发送消息并提供扩展ID,可以从扩展代码中轻松获取。
听起来怎么样?有什么建议吗?
谢谢
答案 0 :(得分:1)
从某种意义上讲,你的方法是正确的。
但chrome.management
是大锤并不是特别适合这项任务。
你说ID改变了。这仅适用于解压缩版本,因为它们尚未使用加密密钥进行签名; Chrome必须将某些内容指定为ID,并执行by hashing the path to the extension/app。
解决方案是将应用程序打包/签名一次,以在CRX中获取合适的公钥,或者自己进行加密as described here。当您在清单中指定"key"
属性时,Chrome会使用它来获取ID并停止更改。
之后,您可以对ID进行硬编码。