Chrome API是否可以让用户从扩展程序弹出窗口或选项页面中分配键盘快捷键?如果不必转到扩展页面,请滚动到底部并打开键盘快捷菜单。
答案 0 :(得分:6)
没有以编程方式分配快捷键的方法,但您可以在扩展弹出窗口中添加一个按钮或链接,以打开内置对话框。
popup.html:
<button id="hotkey">Assign a shortcut key</button>
<script src="popup.js"></script>
popup.js:
document.getElementById('hotkey').onclick = () => chrome.tabs.create({
url: 'chrome://extensions/configureCommands'
});
注意:
chrome://只能通过chrome / WebExtensions API方法打开网址,
但不能直接通过<a href="...">
链接。
您仍然可以使用上面显示的点击监听器的标准<a>
链接;只是不要忘记阻止默认点击事件以避免控制台出错:
document.getElementById('hotkey').onclick = event => {
chrome.tabs.create({url: 'chrome://extensions/configureCommands'});
event.preventDefault();
};
在Opera浏览器中,网址为opera://settings/configureCommands
您可以使用navigator.userAgent
字符串
在Firefox中,还没有用于自定义WebExtensions命令快捷方式的UI。
可能的增强功能是首先检查是否已通过按钮在某个标签页中打开了此类网址:
chrome.tabs.query({url: 'chrome://extensions/configureCommands'}, tabs => {
if (tabs && tabs[0]) {
chrome.tabs.update(tabs[0].id, {active: true});
chrome.windows.update(tabs[0].windowId, {focused: true});
} else {
chrome.tabs.create({url: 'chrome://extensions/configureCommands'});
}
});
但是,它无法在chrome:// extensions页面上手动调用该对话框,因为它不会更改网址。
manifest.json中可能需要"permissions": ["tabs"]
或至少["activeTab"]
。