我有一个带有弹出窗口的Chrome扩展程序,也可以通过快捷方式打开。弹出窗口打开后,是否可以查看用户是否使用了快捷方式,或者是否已单击扩展图标?
原因是我想提示用户使用快捷方式,但我不想向已经知道并使用快捷方式的用户显示提示。
弹出窗口和快捷方式在manifest.json
:
"browser_action": {
"default_icon": "images/icon48.png",
"default_popup": "popup.html",
"default_title": "__MSG_tooltip__"
},
"commands": {
"_execute_browser_action": {
"suggested_key": {
"default": "Ctrl+Shift+Space"
}
}
},
答案 0 :(得分:2)
chrome.browserAction.onClicked.addListener
不可用,因为:
单击浏览器操作图标时触发。这个事件不会发生 如果浏览器操作有弹出窗口。
我们有popup
。
chrome.commands.onCommand.addListener
不可用,因为:
' _execute_browser_action'和' _execute_page_action'命令是 保留用于打开扩展程序弹出窗口的操作。他们没赢 通常会生成您可以处理的事件。
可以尝试将新闻监听器注入某个页面并跟踪按键(在每个页面上)。
var isPressed;
document.body.addEventListener("keydown", function (e) {
if (!(e.keyCode != 17) || !(e.keyCode != 16) || !(e.keyCode != 32)) return;
isPressed = true;
});
从popup
开始,将发送消息展开到content_scripts
:
chrome.tabs.query({active: true, currentWindow: true}, function (tabs) {
chrome.tabs.sendMessage(tabs[0].id, {action: "isPressed"}, function (responce) {
if (responce) {
}
});
});
收到消息后,内容脚本中的侦听器将变量isPressed
作为响应发送:
chrome.runtime.onMessage.addListener(function (message, sender, response) {
if (message.action == "isPressed") {
response(isPressed);
}
});
如果变量为true,则表示通过击键调用,否则单击图标。
答案 1 :(得分:1)
我可以找出用户是否使用了快捷方式或是否使用了快捷方式 点击了扩展图标?
似乎没有直接的方法来检测它。
由于我花了一些力气试图找到一种解决方法,我想分享一下我考虑/试过的内容以及它为什么不起作用的原因:
将键盘快捷键附加到某个自定义命令,修改弹出页面,然后以编程方式打开它。
使用与" _execute_browser_action"相同的快捷方式创建自定义命令。并使用它向弹出窗口发送消息。
尝试在加载后立即在弹出页面中捕获keyup
。
keyup
事件。使用内容脚本在页面上捕获keydown
,然后向弹出页面发送消息,让它知道按下了键盘快捷键(如上面的UserName所示)。
chrome://
,chrome-extension://
)。chrome://extensions
页面上的快捷方式这一事实。以编程方式查找当前分配的快捷方式以在内容脚本中对其进行测试非常困难,因为chrome.commands.getAll()
提供了本地化的密钥名称(例如,英语为"Ctrl+Shift+Space"
,但捷克语为"Ctrl+Shift+Mezera"
。甚至Ctrl和Shift都不会保留英语的语言。