首先介绍一点背景
我的任务是创建一个“程序”,该程序可以在一天中的特定时间截取网页屏幕截图,并将图像保存到用户可以访问的文件夹中。我最初的想法是创建一个扩展程序来完成这项工作,但我很快意识到扩展程序无法访问文件系统,因此我转向可以使用文件系统 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,该扩展程序 ID 可以从扩展程序代码中轻松获取。
听起来怎么样?有什么建议吗?
谢谢
最佳答案
您的方法是正确的,因为它会起作用。
但是 chrome.management
是一个大锤子,并不特别适合这项任务。
你说ID改变了。这种情况仅发生在未打包的版本中,因为它们尚未使用加密 key 进行签名; Chrome 必须分配某些东西作为 ID,它确实做到了 by hashing the path to the extension/app .
解决方案是打包/签署应用程序一次以在 CRX 内获取合适的公钥,或者自己进行加密 as described here 。当您在 list 中指定“key”
属性时,Chrome会使用它来派生ID并停止更改。
之后,您可以对 ID 进行硬编码。
关于google-chrome - 如何从扩展程序中获取 Chrome 应用程序的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26792758/