5

現在、カスタマイズされた検索機能を提供する Web ページを設計しています。CTRL-のブラウザが提供するデフォルトの検索バーに干渉する可能性があるFため、イベントを無効にして、デフォルトの検索バーがポップアップしないようにします。代わりに私たちの検索バーが表示されます。

問題は、Firefox と Internet Explorer では、Chrome や Safari や Opera とは異なり、検索バーがすべてのタブで共有可能であることです。したがって、他のタブにいる場合は、CTRL-を実行Fしてデフォルトの検索バーをポップアップし、このページにジャンプすると、検索バーがまだそこにあり、目的が完全に無効になります。

不可能に聞こえるかもしれませんが、デフォルトの検索バーを無効にする方法、つまり JavaScript を使用して完全に非表示にする方法はありますか? 次に、ユーザーがタブでページに移動したことを検出したときにそれを実行します。

それが不可能な場合、特定の要素のデフォルト検索を無効にする方法はありますcontenteditable divか? CTRL-が単語のページを反復処理し、Fを押すたびにすべてのインスタンスを強調表示している間ENTER、その要素内のすべての単語は完全に無視されますか?

4

5 に答える 5

7

サンドボックス スクリプト

JavaScript を使用してページから他のタブの動作やコンテンツを制御することはできないため、これは不可能です。

基本的に: これを実現する唯一の方法は、ソース コードをフォークし、検索バーに独自の機能を提供する独自のバージョンのブラウザーを作成することです。IE の場合、たとえば .Net で Web コントロール用のラッパーを作成して配布できますが、ここでは IE バージョンを制御できません。

これは少し極端な IMO ですが、バニラ バージョンではこれを回避することはできず、当然のことながら、セキュリティ上の問題が多数発生することになります。

拡張機能は別のアプローチのように見えるかもしれませんが、それらはセキュリティの対象でもあり、この点で制限されるため、次のことを超えることはありません-

限定的なブラウザの動作制御

+を上書きすることはできますが、これはスクリプトが実行されたタブでのみ機能します (これはデフォルトのブラウザーの動作を変更するため、ユーザーの承認なしにこれを行うことは強くお勧めしません)。ctrlf

これを行う例:

document.onkeydown = function(e) {

    /// for IE
    e = e || event;
    var keyCode = (window.event) ? e.which : e.keyCode;

    /// check ctrl + f key
    if (e.ctrlKey === true && keyCode === 70) {
        e.preventDefault();
        
        console.log('Ctrl + f was hit...');
        
        return false;
    }
}

オンラインデモはこちら

更新: Maccommandキーについては、既にここで回答されています:
How does one capture a Mac's command key via JavaScript? .

于 2013-10-10T03:17:32.367 に答える
5

Ctrlすでに+キープレスをリッスンしていてF、デフォルトの動作を抑制しているようです。これはあなたが行くことができる限りです。

言い換えれば、あなたの質問に対する答えはまったく単純にNOです。

ページ内検索検索バーは、ブラウザのクロムの一部です。DOM などを介してアクセスする方法はありません。ブラウザーは、ページ内検索機能をページで制御できるような API を提供していません。すでに開いている検索バーを閉じることはできません。開くことはできません。検索入力ボックスの内容を読み取ったり、制御したりすることはできません。

ページ内検索機能を何らかの方法で制御する拡張機能を作成できる場合もありますが、明らかに、ユーザーにそれをインストールするよう説得する必要があり、ターゲットとするブラウザーごとに 1 つ必要になります。

率直に言って、デフォルトのブラウザーの動作を無効にしたり、妨害したりしようとしている人を目にするときはいつでも、それは通常、見当違いで悪い考えです。自分の検索機能は非常に優れていると思うかもしれませんが (自分で書いたのですから)、予期しない方法でユーザーを制限している可能性があります。(正確なユースケースを見ないと断言できませんが、これは一般的なルールです。)

標準のブラウザ機能を無効にしようとしている場合は、おそらく間違っています。

于 2013-10-10T03:31:28.383 に答える
1

デフォルトのブラウザー UI を変更することは単純に間違っています。ブラウザーの検索 UI と平和的に共存するように Web ページの検索ロジックを設計する必要があります。

ユーザーに利益をもたらすカスタム ブラウザー エクスペリエンスを本当に提供したい場合は、コンテンツに合わせてカスタム ブラウザー アプリケーションを作成し、それを使用するオプションをユーザーに提供する必要があります。

これにより、カスタム ナビゲーションと検索 UI を自由に作成できるようになります。これは、多くのキオスクのようなブラウザー ソリューションで行われていることです。IE WebBrowser Control、WebKit、Chrome Embedding Toolkit など、開始するオプションは多数あります。

于 2013-10-15T23:10:49.790 に答える
0

JavaScript ホットキーを利用できます。もちろん、同じためのビルトイン機能はありませんが、このように実現できます-

var isCtrl = false;         //In the Global scope
document.onkeyup = function(evn){
    if(evn.which == 17){isCtrl = true;}     //.which stores an ASCII related code of the key pressed; 17 stands for the Ctrl key
}
document.onkeydown = function(evn){
    if(evn.which == 17){isCtrl = true;}
    if((evn.which == 70) && (isCtrl = true)){    //70 stands for 'F' or 'f'
        //Popup the search bar
        //isCtrl = false; if you are using prompt() box
        return false;
    }
}

Google Chrome でこれをテストしました。実際に動作します。

編集:Ctrl + 1Ctrl+ 2... などのデフォルトのホットキーをオーバーライドすることは可能ですが、 + (ページを開く) Ctrl+ (ページを保存) などのキーの組み合わせではオーバーライドできないことがわかりました。OCtrlS

于 2013-10-14T16:09:54.340 に答える