Bra*_*gel 2 google-chrome-extension
是否可以检测到镀铬栏中浏览器操作按钮的Shift-click或Command-click?
例如,以下代码不起作用:
chrome.browserAction.onClicked.addListener(function(e) {
console.log(e.shiftKey) // is undefined
});
Run Code Online (Sandbox Code Playgroud)
小智 5
我找到了一种方法来实现这一目标。就我而言,我需要在工具栏图标上检测到ctrl-click和ctrl-alt-click事件。
显然,后台脚本无法捕获键盘事件,但是内容脚本可以。因此,我在内容脚本中设置了一个事件侦听器,以侦听ctrl和alt按下按键并将消息发送到后台脚本。碰巧的是,该keydown事件具有boolean属性ctrlKey并且是altKey内置的,因此我不必隐式检查keypress的值。在您的情况下,可以使用该shiftKey属性。
content.js
window.addEventListener('keydown',function(event){
if(event.ctrlKey){
chrome.runtime.sendMessage({type: 'ctrlPressed'}, function(){});
}
if(event.altKey){
chrome.runtime.sendMessage({type: 'altPressed'}, function(){});
}
});
window.addEventListener('keyup',function(event){
chrome.runtime.sendMessage({type: 'keyup'}, function(){});
});
Run Code Online (Sandbox Code Playgroud)
background.js
var ctrlPressed = false;
var altPressed = false;
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse){
switch(request.type){
case 'ctrlPressed':
ctrlPressed = true;
break;
case 'altPressed':
altPressed = true;
break;
case 'keyup':
ctrlPressed = false;
altPressed = false;
break;
}
});
Run Code Online (Sandbox Code Playgroud)
现在我chrome.browserAction.onClicked.addListener可以检测click,double-click,ctrl-click,和ctrl-alt-click。(仅用一点点代码,我也可以检测到ctrl-double-click和ctrl-alt-double-click。)唯一的警告是,活动选项卡必须具有焦点才能捕获按键。window.focus()例程末尾的行应处理该问题。
background.js
// Listen for toolbar icon clicks
var clickCnt = 0;
chrome.browserAction.onClicked.addListener(function(tab){
clickCnt++;
if(clickCnt > 1){
console.log('Double click detected');
clickCnt = 0;
clearTimeout(timer);
}else{
if(ctrlPressed){
if(altPressed){
console.log('ctrl-alt-click detected');
}else{
console.log('ctrl-click detected');
}
}
timer = setTimeout(function(){
console.log('Single click detected');
clickCnt = 0;
}, 250);
}
window.focus()
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
837 次 |
| 最近记录: |