2011-07-13 39 views
9

mỗi trình duyệt đã tìm thấy trên chức năng trang (ctrl + F). Có cách nào để phát hiện tìm kiếm của người dùng trong javascript để tôi có thể đính kèm các hành động bổ sung không.Có cách nào để phát hiện tìm kiếm trên các tìm kiếm trang trong javascript

+0

Thú vị câu hỏi; Tôi đã không bao giờ nghe nói về điều này đang được thực hiện, và tôi không nghĩ rằng tôi đã từng nhìn thấy nó trong hành động, nhưng tôi tò mò bây giờ. – Pointy

+0

bạn có thể nghe một sự kiện nhấn phím ctrl + F không? (hoặc lệnh + F vv) hoặc không bong bóng qua vì hộp thoại tìm kiếm? – jlb

+0

^F không phải là cách duy nhất để bắt đầu tìm kiếm - trong Firefox là "/" (ít nhất, nó là dành cho tôi). – Pointy

Trả lời

2

Tất nhiên bạn có thể thử móc vào ctrl+f hoặc cmd+f phím tắt, nhưng ngay cả khi nó hoạt động trên các trình duyệt "một số", theo cách đó bạn chỉ biết rằng một người dùng đã nhấn phím tắt đó và có nhiều khả năng tìm kiếm thứ gì đó.

Nếu trình duyệt cho phép ghi đè lối tắt đó, bạn có thể chặn thêm hành vi mặc định và triển khai logic tìm kiếm của riêng bạn trên trang web. Nhưng điều đó được coi là lần thực hành tồi tệ nhất. Việc ghi đè hành vi của trình duyệt gốc khá tệ.

Mặt khác, không có "sự kiện" được kích hoạt khi trình duyệt thực hiện quy trình tìm kiếm. Nói cách khác, không, thực sự không có cách nào để phát hiện hoặc móc vào một quá trình tìm kiếm với javascript (nếu có, nó sẽ không bao giờ tương thích với trình duyệt chéo).

+0

Vì tôi đã quan tâm đến quá trình tìm kiếm, không chỉ là contl + F, nên tôi sẽ phải sống với điều này. cảm ơn – Alexander

5

Bạn có thể làm (để phát hiện whenb một ctrl sử dụng báo chí + f):

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

Fiddle ở đây: http://jsfiddle.net/d8T72/

4

Đây là giải pháp có thể giải thích cho các tình huống tìm kiếm trang thay thế (ví dụ: Command + F, '/' trên Firefox). Nó kiểm tra cho bất kỳ của các phím bấm và thiết lập một bộ đếm thời gian khi chúng xảy ra. Nếu cửa sổ bị mờ ngay sau đó, thì giả định rằng hộp thoại Tìm đang hiển thị.

Nhược điểm: không tính đến hộp thoại "Tìm" được khởi chạy qua menu. Tôi không thấy bất kỳ cách nào để chắc chắn về phần này, vì (theo như tôi biết, ít nhất) giao diện người dùng trình duyệt không có giới hạn cho Javascript đang chạy bên trong 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, thử nghiệm trong Chrome, Safari và Firefox

2

Như ban đầu được đề xuất bởi @Nicola Peluchetti, đây là một phiên bản cải tiến đôi chút tính năng đánh hơi:

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

Browser search test case »

Các vấn đề liên quan