有没有一种方法可以检测javascript中的页面搜索

有没有一种方法可以检测javascript中的页面搜索,javascript,events,find,Javascript,Events,Find,每个浏览器都具有页面查找功能(ctrl+F)。是否有一种方法可以检测javascript中的用户搜索,以便我可以附加其他操作。您可以这样做(要检测用户何时按下ctrl+f): 在这里拉小提琴:当然你可以尝试连接到ctrl+f或cmd+f快捷方式,但即使这在“某些”浏览器上起作用,这样你也只会知道用户按下了该快捷方式,并且很可能会搜索某个内容 如果浏览器允许覆盖该快捷方式,则可以进一步阻止默认行为,并在站点上实现自己的搜索逻辑。但这在大多数情况下被认为是非常糟糕的做法。覆盖本机浏览器行为非常糟糕

每个浏览器都具有页面查找功能(ctrl+F)。是否有一种方法可以检测javascript中的用户搜索,以便我可以附加其他操作。

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

在这里拉小提琴:

当然你可以尝试连接到
ctrl+f
cmd+f
快捷方式,但即使这在“某些”浏览器上起作用,这样你也只会知道用户按下了该快捷方式,并且很可能会搜索某个内容

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


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

这里有一个解决方案,可以解释其他页面查找情况(例如,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;
    }
});
var keydown=null;
$(窗口).keydown(函数(e){
if((e.keyCode==70&&(e.ctrlKey | | e.metaKey))||
(e.keyCode==191)){
keydown=newdate().getTime();
}
返回true;
}).blur(函数(){
如果(向下键!==null){
var delta=new Date().getTime()-keydown;
如果(增量>=0&&增量<1000)
console.log('finding');
keydown=null;
}
});

,在Chrome、Safari和Firefox中测试,正如@Nicola Peluchetti最初建议的那样,这里是一个通过功能嗅探稍微改进的版本:

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

有趣的问题;我从来没有听说过这样做,我也不认为我见过它的实际应用,但我现在很好奇。你能听一下ctrl+F键按下事件吗?(或command+F等)或者这不会因为搜索对话框而冒泡吗?好吧,^F不是启动搜索的唯一方式-在Firefox中是“/”(至少对我来说是这样)。Netflix可以使用一些检测,当所有电影的标题都嵌入到图像中,并且没有任何可搜索的文本时,无法在页面上搜索某些内容,因为我对搜索过程感兴趣,而不仅仅是contl+F,所以我不得不接受这一点。谢谢
window.onkeydown = function(e){
    var ck = e.keyCode ? e.keyCode : e.which;
    if(e.ctrlKey && ck == 70){
        alert('Searching...');
    }
}