2011-07-13 1 views
9

chaque navigateur a trouver la fonctionnalité de la page (ctrl + F). Existe-t-il un moyen de détecter les recherches d'utilisateurs dans javascript afin que je puisse attacher des actions supplémentaires.Y at-il un moyen de détecter trouver sur la page de recherche dans le javascript

+0

Intéressant question; Je n'ai jamais entendu parler de cela, et je ne pense pas l'avoir jamais vu en action, mais je suis curieux maintenant. – Pointy

+0

pouvez-vous écouter un événement de clavier ctrl + F? (ou commande + F etc.) ou est-ce que cela ne passe pas à travers le dialogue de recherche? – jlb

+0

Eh bien^F n'est pas le seul moyen de lancer une recherche - dans Firefox c'est "/" (au moins, c'est pour moi). – Pointy

Répondre

2

Bien sûr, vous pouvez essayer de crochet dans ctrl+f ou cmd+f raccourci, mais même si cela fonctionne sur "certains" navigateurs, de cette façon vous saurez seulement qu'un utilisateur a appuyé sur ce raccourci et est le plus susceptible de chercher quelque chose. Si le navigateur permet d'écraser ce raccourci, vous pouvez bloquer davantage le comportement par défaut et implémenter votre propre logique de recherche sur le site. Mais cela est considéré la plupart du temps comme une très mauvaise pratique. L'écrasement du comportement du navigateur natif est plutôt mauvais. Par contre, il n'y a pas d '«événement» qui se déclenche lorsqu'un navigateur exécute un processus de recherche. Par contre, il n'y a pas d' «événement» qui se déclenche. En bref, non, il n'y a aucun moyen de détecter ou d'accrocher un processus de recherche avec javascript (s'il y en a un, il ne sera jamais compatible avec tous les navigateurs).

+0

Depuis que je suis intéressé par le processus de recherche, pas seulement contl + F, donc je vais devoir vivre avec ça. Merci – Alexander

5

Vous pouvez faire (pour détecter whenb une presse utilisateur ctrl + f):

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

Fiddle ici: http://jsfiddle.net/d8T72/

4

Voici une solution qui peut prendre en compte d'autres situations de recherche de pages (par exemple Commande + F, '/' sur Firefox). Il vérifie l'une de ces touches et définit une minuterie lorsqu'elles se produisent. Si la fenêtre est brouillée peu après, il est supposé que la boîte de dialogue Rechercher est affichée. Inconvénients: ne tient pas compte du lancement de la boîte de dialogue "Rechercher" via le menu. Je ne vois aucun moyen d'être sûr de cette partie, puisque (pour autant que je sache, au moins) l'interface utilisateur du navigateur est interdite à Javascript qui s'exécute dans le DOM.

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, testé dans Chrome, Safari et Firefox

2

Comme initialement suggéré par @Nicola Peluchetti, voici une version légèrement améliorée par fonction reniflant:

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

Browser search test case »

Questions connexes