是否可以检测转换点击或按住命令单击chrome栏中的浏览器操作按钮?
例如,以下代码不起作用:
chrome.browserAction.onClicked.addListener(function(e) {
console.log(e.shiftKey) // is undefined
});
答案 0 :(得分:5)
我找到了实现这个目标的方法。就我而言,我需要在工具栏图标上检测到ctrl-click
和ctrl-alt-click
事件。
显然后台脚本无法捕获键盘事件,但内容脚本可以。因此,我在内容脚本中设置了一个事件监听器,以监听ctrl
和alt
按键,并向后台脚本发送消息。碰巧的是,keydown
事件具有内置ctrlKey
和altKey
的布尔属性,因此我不必隐式检查按键的值。在您的情况下,可以使用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(){});
});
<强> 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;
}
});
现在我的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()
});
答案 1 :(得分:0)
不,它不是由API提供的。您无法检测修改器或不同的鼠标按钮。
Chrome API事件不是DOM事件,查找e
参数无济于事。每个事件都有自己的参数列表传递给回调;在文档中查找。
callback参数应该是一个如下所示的函数:
function(tabs.Tab tab) {...};
tabs.Tab
tab
因此,您获得的唯一信息是单击按钮时的当前选项卡。