如何从扩展程序中获取chrome应用程序的ID

时间:2014-11-07 01:51:15

标签: google-chrome google-chrome-extension message-passing

首先是一个小背景

我的任务是创建一个“程序”,可以在一天中的特定时间截取网页截图,并将图像保存到用户可以访问的文件夹中。我最初的想法是创建一个扩展来完成这项工作,但我很快意识到扩展无法访问文件系统,因此我转向使用可以使用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,可以从扩展代码中轻松获取。

听起来怎么样?有什么建议吗?

谢谢

1 个答案:

答案 0 :(得分:1)

从某种意义上讲,你的方法是正确的。

chrome.management大锤并不是特别适合这项任务。

你说ID改变了。这仅适用于解压缩版本,因为它们尚未使用加密密钥进行签名; Chrome必须将某些内容指定为ID,并执行by hashing the path to the extension/app

解决方案是将应用程序打包/签名一次,以在CRX中获取合适的公钥,或者自己进行加密as described here。当您在清单中指定"key"属性时,Chrome会使用它来获取ID并停止更改。

之后,您可以对ID进行硬编码。