2011-07-13 13 views
9

各ブラウザにはページの機能(ctrl + F)があります。 javascriptでユーザーの検索を検出する方法があるので、追加のアクションを追加することができます。javacriptのページ検索でfindを検出する方法はありますか?

+0

は、質問;私はこれが行われていることは聞いたことがない、と私は今までそれを見たことがないと思うが、私は今好奇心が強い。 – Pointy

+0

あなたはCtrl + Fキーダウンイベントを聞くことができますか? (またはコマンド+ Fなど)、または検索ダイアログのためにバブルスルーしないのですか? – jlb

+0

よく^ Fが検索を開始する唯一の方法ではありません - Firefoxでは "/"です(少なくとも私のためです)。 – Pointy

答えて

2

が、たとえそれが「一部の」ブラウザで動作していても、ユーザーがそのショートカットを押して、何かを検索する可能性が高いことが分かります。

ブラウザがそのショートカットを上書きすることができる場合は、デフォルトの動作をさらにブロックし、独自の検索ロジックをサイトに実装できます。しかし、これはほとんどの時間は非常に悪い練習とみなされます。ネイティブブラウザの動作を上書きするのはかなり面倒です。

一方、ブラウザが検索プロセスを実行したときにトリガされる「イベント」はありません。要するに、いいえ、実際にはjavascriptを使って検索プロセスを検出したりフックしたりする方法がありません(ある場合は、ブラウザ間での互換性はありません)。

+0

私は検索プロセスに興味があったので、contl + Fだけでなく、これで生きなければなりません。ありがとう – Alexander

5

あなたは(whenbユーザープレスCTRL + Fを検出するために)行うことができます:ここに

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

はフィドル:あなたがctrl+fまたはcmd+fショートカットにフックに試すことができます。もちろん、http://jsfiddle.net/d8T72/

4

ここでは、代替ページ検索状況(例えば、Command + F、Firefoxでは '/')を考慮に入れることができるソリューションです。これらのキーが押されたかどうかを確認し、発生したときにタイマーを設定します。すぐにウィンドウがぼやけた場合は、[検索]ダイアログが表示されているとみなされます。

短所:「検索」ダイアログがメニューから起動されることを考慮していません。 (私が知る限り、少なくともブラウザUIはDOM内で実行されているJavascriptに制限されていないので、私はこの部分について確かめる方法は見当たりません。クロム、SafariやFirefoxの

でテスト

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

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 »

関連する問題