能否通过Firefox的AutoConfig修改或移除devtoolsKeyset的快捷键绑定?
能否通过Firefox的AutoConfig修改或移除devtoolsKeyset的快捷键绑定?
嘿,刚好踩过类似的坑,其实完全可以用AutoConfig搞定devtoolsKeyset的快捷键,只是得换个思路——毕竟devtools的按键绑定不是跟主浏览器窗口一起加载的,藏在DevTools自身的文档里,所以直接在AutoConfig里找主文档的元素肯定找不到。给你捋捋具体怎么做:
核心思路:等待DevTools加载后再操作
DevTools的UI是单独加载的,我们可以通过监听Firefox的内置事件,等DevTools面板完全加载好之后,再去它的窗口里定位到devtoolsKeyset并修改。
具体的AutoConfig脚本示例
你可以把这段代码加到你的AutoConfig脚本里:
// 监听DevTools主面板加载完成的事件 Services.obs.addObserver(function(subject, topic, data) { // 获取DevTools的窗口对象 const devToolsWindow = subject.top; // 找到目标keyset const devtoolsKeyset = devToolsWindow.document.getElementById("devtoolsKeyset"); if (!devtoolsKeyset) return; // 举个例子:移除F12打开DevTools的绑定 const f12KeyBinding = devtoolsKeyset.querySelector('[key="VK_F12"]'); if (f12KeyBinding) { devtoolsKeyset.removeChild(f12KeyBinding); } // 再比如:废掉Ctrl+Shift+I的绑定(改成无操作) const inspectKeyBinding = devtoolsKeyset.querySelector('[command="Tools:DevTools"]'); if (inspectKeyBinding) { inspectKeyBinding.setAttribute("key", ""); inspectKeyBinding.setAttribute("modifiers", ""); } // 如果要批量禁用,还可以遍历所有key元素 // const allKeys = devtoolsKeyset.querySelectorAll("key"); // allKeys.forEach(key => devtoolsKeyset.removeChild(key)); }, "devtools-browser-loaded", false);
为什么之前的方法没用?
你说在view-source:chrome://browser/content/browser.xhtml里找不到devtoolsKeyset,没错——因为它根本不在主浏览器的文档里,而是属于DevTools独立的文档结构,只有当DevTools被打开加载时才会生成。所以直接在AutoConfig里操作主文档的元素自然碰不到它,必须等DevTools加载完成后去它自己的窗口里找。
额外提示
如果有些快捷键是特定DevTools面板(比如调试器、控制台)独有的,你还可以监听devtools-panel-loaded事件,针对单个面板的keyset做修改,逻辑和上面类似,只是要额外判断面板类型。
这种方法既不用改omni.ja,也不用依赖扩展,还绕开了注册表权限的问题,完全符合你的需求~
备注:内容来源于stack exchange,提问作者eugaet
相关产品推荐
相关产品推荐

