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

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

首先介绍一点背景

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

相关文章:

javascript - 开发一个 Chrome 扩展来覆盖自签名证书的 SSL 证书异常

google-chrome - https ://clients2. google.com/service/update2/crx 不再有效了吗?

c - 如何让 MPI 中的所有等级向等级 0 发送一个值,然后阻塞接收所有等级?

java - Disrupror 消费者重新提交数据

html - 在新标签页的 iframe 中打开 PDF - Google Chrome

javascript - 为什么我的 XMLHttpRequest 收到 robots.txt 响应

javascript - 同时登录网站和 Chrome 扩展程序

Erlang工作进程

HTML 选择字体大小

Android 深层链接和回退到 URL