有没有办法在javascript中检测页面上的查找搜索

时间:2011-07-13 14:06:44

标签: javascript events find

每个浏览器都有页面功能(ctrl + F)。有没有办法在javascript中检测用户搜索,以便我可以附加其他操作。

4 个答案:

答案 0 :(得分:6)

这是一个可以解决替代页面查找情况的解决方案(例如Firefox上的Command + F,'/')。它会检查这些按键中的任何一个,并在发生时设置定时器。如果窗口很快变模糊,则假定显示“查找”对话框。

缺点:不考虑通过菜单启动的“查找”对话框。我认为没有任何方法可以确定这一部分,因为(据我所知,至少)浏览器UI是在DOM内部运行的Javascript的禁区。

var keydown = null;

$(window).keydown(function(e) {
    if ( ( e.keyCode == 70 && ( e.ctrlKey || e.metaKey ) ) ||
         ( e.keyCode == 191 ) ) {
        keydown = new Date().getTime();
    }

    return true;
}).blur(function() {
    if ( keydown !== null ) {
        var delta = new Date().getTime() - keydown;
        if ( delta >= 0 && delta < 1000 )
            console.log('finding');

        keydown = null;
    }
});

jsFiddle,在Chrome,Safari和Firefox中测试

答案 1 :(得分:5)

你可以这样做(检测用户何时按ctrl + f):

window.onkeydown = function(e){
   if(e.keyCode == 70 && e.ctrlKey){
    //user pressed ctrl+f
}

在这里小提琴:http://jsfiddle.net/d8T72/

答案 2 :(得分:2)

当然,您可以尝试挂钩ctrl+fcmd+f快捷方式,但即使这适用于“某些”浏览器,这样您也只会知道用户按下了该快捷方式,最有可能搜索某些内容。

如果浏览器允许覆盖该快捷方式,则可以进一步阻止默认行为并在站点上实现您自己的搜索逻辑。但这被认为是非常糟糕的做法。覆盖本机浏览器行为非常糟糕。

另一方面,当浏览器执行搜索过程时,没有“事件”被触发。简而言之,不,实际上没有办法用javascript检测或挂钩搜索过程(如果有的话,它永远不会与浏览器兼容)。

答案 3 :(得分:2)

正如@Nicola Peluchetti最初建议的那样,这是一个稍微改进的版本,通过功能嗅探:

window.onkeydown = function(e){
    var ck = e.keyCode ? e.keyCode : e.which;
    if(e.ctrlKey && ck == 70){
        alert('Searching...');
    }
}

Browser search test case »