检测班次/命令点击Chrome浏览器操作按钮

时间:2015-04-08 21:07:37

标签: google-chrome-extension

是否可以检测转换点击或按住命令单击chrome栏中的浏览器操作按钮?

例如,以下代码不起作用:

chrome.browserAction.onClicked.addListener(function(e) {
    console.log(e.shiftKey) // is undefined
});

2 个答案:

答案 0 :(得分:5)

我找到了实现这个目标的方法。就我而言,我需要在工具栏图标上检测到ctrl-clickctrl-alt-click事件。

显然后台脚本无法捕获键盘事件,但内容脚本可以。因此,我在内容脚本中设置了一个事件监听器,以监听ctrlalt按键,并向后台脚本发送消息。碰巧的是,keydown事件具有内置ctrlKeyaltKey的布尔属性,因此我不必隐式检查按键的值。在您的情况下,可以使用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可以检测到clickdouble-clickctrl-clickctrl-alt-click。 (只需更多代码,我也可以检测到ctrl-double-clickctrl-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参数无济于事。每个事件都有自己的参数列表传递给回调;在文档中查找。

如果是browserAction.onClicked

  

callback参数应该是一个如下所示的函数:

function(tabs.Tab tab) {...};
     

tabs.Tab tab

因此,您获得的唯一信息是单击按钮时的当前选项卡。