【发布时间】:2014-11-07 01:51:15
【问题描述】:
先介绍一点背景
我的任务是创建一个“程序”,该程序将在一天中的特定时间截取网页并将图像保存到用户可以访问的文件夹中。我最初的想法是创建一个扩展来完成这项工作,但我很快意识到扩展无法访问文件系统,所以我转向可以使用文件系统 API 的 chrome 应用程序。但是,chrome 应用程序无法访问截取当前页面所需的功能,因此我最终创建了两者:扩展程序截取屏幕截图并将其 blob 发送到应用程序,该应用程序将其保存到文件系统.这个过程有点复杂,但效果很好。
现在,应用程序/扩展程序通信通过 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。
听起来怎么样?有什么建议吗?
谢谢
【问题讨论】:
-
简而言之:如果您生成了一个您将用于应用程序的密钥(并保存它,因为您在发布时需要它),您可以在清单中“固定”该 ID。
-
所以扩展程序/应用程序 ID 将被硬编码?我一直在积极避免这种情况。
-
你为什么要避免它?如果/当您发布时,ID 将不再更改。出于安全原因,更好 将其固定。它只会在未打包的开发版本中发生变化,并且只有当您不像上面解释的那样固定它时才会发生变化。
-
替代方案,使用
managementAPI,是一个非常重的锤子。
标签: google-chrome google-chrome-extension message-passing