如何生成解压扩展程序的Chrome扩展程序ID?

时间:2014-09-26 06:35:45

标签: google-chrome-extension

我想与同事分享一个解压缩的扩展程序。它在注入的脚本中使用方法chrome.runtime.sendMessage(string extensionId, any message, object options, function responseCallback)。为此,我需要提前知道扩展ID。

解压缩扩展程序的扩展程序ID在不同系统上是否会有所不同,或者我可以在扩展程序菜单中对我找到的扩展程序进行硬编码?

3 个答案:

答案 0 :(得分:12)

虽然我链接到this question解释了如何“解锁”解压缩扩展的ID,这可以解决OP面临的实际问题,但问题本身(如标题中所述)很有趣。

如果我们查看Chromium source,我们将看到ID只是一个SHA哈希(可能是规范化的,无论这意味着什么)扩展的绝对路径。代码中的亮点:

// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// chromium/src/chrome/browser/extensions/unpacked_installer.cc
int UnpackedInstaller::GetFlags() {
  std::string id = crx_file::id_util::GenerateIdForPath(extension_path_);
  /* ... */
}

// chromium/src/components/crx_file/id_util.cc
std::string GenerateIdForPath(const base::FilePath& path) {
  base::FilePath new_path = MaybeNormalizePath(path);
  std::string path_bytes =
      std::string(reinterpret_cast<const char*>(new_path.value().data()),
                  new_path.value().size() * sizeof(base::FilePath::CharType));
  return GenerateId(path_bytes);
}

std::string GenerateId(const std::string& input) {
  uint8 hash[kIdSize];
  crypto::SHA256HashString(input, hash, sizeof(hash));
  std::string output =
      base::StringToLowerASCII(base::HexEncode(hash, sizeof(hash)));
  ConvertHexadecimalToIDAlphabet(&output);

  return output;
}

因此,它应该只依赖于扩展文件夹的绝对文件系统路径。

答案 1 :(得分:0)

X的答案是正确的。但是,仅基于上面的Chromium代码进行扩展以供参考,就可以使用此python代码来计算扩展ID。

import hashlib

m = hashlib.sha256()
m.update(bytes(PATH.encode('utf-8')))
EXTID = ''.join([chr(int(i, base=16) + ord('a')) for i in m.hexdigest()][:32])

答案 2 :(得分:0)

也许是NormalizePath 正在影响Windows用例:

libraryTarget:'umd'