我想与同事分享一个解压缩的扩展程序。它在注入的脚本中使用方法chrome.runtime.sendMessage(string extensionId, any message, object options, function responseCallback)
。为此,我需要提前知道扩展ID。
解压缩扩展程序的扩展程序ID在不同系统上是否会有所不同,或者我可以在扩展程序菜单中对我找到的扩展程序进行硬编码?
答案 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'