通常情况下,您无法创建一个Chrome扩展程序,可以向开发者工具页面注入代码。
“发现开发者工具伴侣”扩展程序(以下简称DDC)可以执行此操作,因为该扩展程序已经被列入Chromium源代码的白名单中:(这已不再是事实)
// Whitelist "Discover DevTools Companion" extension from Google that
// needs the ability to script DevTools pages. Companion will assist
// online courses and will be needed while the online educational programs
// are in place.
scripting_whitelist_.push_back("angkfkebojeancgemegoedelbnjgcgme");
如果你想要在Chrome Web Store发布具备这些功能的扩展,那就放弃吧。
如果你想要为个人或内部使用创建这样的扩展,请继续阅读。
方法1:冒充白名单扩展
创建一个具有这些权限的扩展最简单的方法是创建一个扩展,并将其扩展ID设置为白名单扩展的ID(例如ChromeVox)。这可以通过将其清单文件中的"key"
键复制到你的扩展清单文件中来实现(请参见:如何获取密钥?)。以下是一个最小示例:
manifest.json
{
"content_scripts": [{
"js": [ "run_as_devtools.js" ],
"matches": [ "<all_urls>" ]
}],
"key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDEGBi/oD7Yl/Y16w3+gee/95/EUpRZ2U6c+8orV5ei+3CRsBsoXI/DPGBauZ3rWQ47aQnfoG00sXigFdJA2NhNK9OgmRA2evnsRRbjYm2BG1twpaLsgQPPus3PyczbDCvhFu8k24wzFyEtxLrfxAGBseBPb9QrCz7B4k2QgxD/CwIDAQAB",
"manifest_version": 2,
"name": "Elevated Devtools extension",
"version": "1.0"
}
run_as_devtools.js
if (location.protocol === 'chrome-devtools:') (function() {
'use strict';
})();
注意:该方法是一种真正的黑客方式。由于扩展程序与ChromeVox共享相同的ID,两个扩展程序无法共存。如果Chrome决定删除白名单扩展程序,则您的权限将消失。
除了通过内容脚本进行过滤外,您还可以使用include_globs
key来将内容脚本限制为仅在开发工具中使用。
方法二:修改resources.pak
如果可能,请使用方法1。当方法1失败时(例如因为扩展不再在白名单中),请使用下一个方法。
- 从DennisKehrig/patch_devtools(在Github上)获取
paktools.py
,unpack.py
和pack.py
。
- 找到包含
resources.pak
的Chrome目录。
- 运行
python2 unpack.py resources.pak
,这将创建一个名为resources
的目录,其中包含所有文件(所有文件名都是数字)。
- 找到在开发人员工具上下文中运行的脚本所在的文件。在那里添加您想要的代码。
- 删除
resources.pak
- 运行
python2 pack.py resources
以创建新的resources.pak
文件。
注意:resources.pak
可能会在Chrome更新时被替换,因此建议创建一个自动化描述算法的脚本。这不应该太困难。
如果您感兴趣,可以在
ui/base/resource/data_pack_literal.cc
中查找
.pak
文件格式(
用人类语言描述的内容)。
键值“key”缺失或无效。
- Jason