首先一点背景
我的任务是创建一个“程序”,该程序将在一天中的指定时间获取网页的屏幕截图,并将图像保存到用户可访问的文件夹中。我最初的思路是创建一个扩展来完成这项工作,但是我很快意识到扩展无法访问文件系统,因此我转向了可以使用fileSystem API的chrome应用程序。但是,chrome应用程序无法访问获取当前页面屏幕截图所需的功能,因此我最终创建了两者:扩展程序获取屏幕截图并将其一滴发送到应用程序,然后将其保存到文件系统。这个过程有点令人费解,但就像一个魅力。
现在,应用程序/扩展名通信通过chrome的Message Passing API进行。为了进行通讯,我需要事先知道扩展程序或应用程序的ID。到目前为止,我已经对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。
听上去怎么样?有什么建议?
谢谢
从某种意义上说,您的方法是正确的。
但是不是特别适合该任务chrome.management
的大锤子。
您说过ID发生了变化。仅在解压缩版本中会发生这种情况,因为尚未使用加密密钥对其进行签名。Chrome必须分配一些内容作为ID,并通过哈希扩展程序/ app的路径来实现。
解决方案是将应用打包或签名一次以获得CRX内部合适的公钥,或者按照此处所述自己进行加密。当您"key"
在清单中指定属性时,Chrome会使用该属性派生ID,并且它会停止更改。
之后,您可以对ID进行硬编码。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句