10

Tôi đang viết một tiện ích mở rộng Chrome khởi chạy tập lệnh có lối tắt bàn phím. Nó hoạt động tốt trên hầu hết các trang nhưng tôi nhận ra rằng trên Gmail nó không: có vẻ như tất cả các sự kiện bàn phím được chụp bởi Gmail và không sôi sục lên đến chức năng của tôi.Gmail dường như nắm bắt tất cả các sự kiện bàn phím. Bất kỳ cách nào để đi xung quanh đó?

Tôi có một kịch bản nội dung (trong phần mở rộng Chrome này sẽ được thêm vào bất kỳ trang nào bạn muốn) đã (giản thể tất nhiên):

document.body.addEventListener('keypress', myFunction, true); 
function myFunction(event) { 
    console.log("yay, Gmail didn't let me down!"); 
} 

Nhưng trên thực tế, Gmail không làm tôi thất vọng. Tôi biết rằng tập lệnh được tải. Tôi đã thử các biến thể khác nhau của window.addEventListener và các loại sự kiện khác không có kết quả.

Có ai biết cách vượt qua điều này không? Tôi đã cố gắng để xem nếu kịch bản GreaseMonkey có thể làm điều đó, mang lại cho tôi ở đây: http://code.google.com/p/gmail-greasemonkey/ nhưng điều đó đã không giúp tôi.

Cảm ơn!

+0

Bạn có thể yêu cầu tất cả người dùng tắt phím tắt trong cài đặt Gmail của họ. Nhưng họ có thể không thích điều đó. Và tôi không chắc nó có hoạt động không. – MatrixFrog

+1

Điều đó không thực sự khả thi. Phần mở rộng của tôi không thành công lắm, vì vậy tôi không thể tưởng tượng được ai đang sử dụng nó. Bên cạnh đó, tôi là người dùng duy nhất ngay bây giờ, vì vậy tôi sẽ không muốn điều đó :) –

Trả lời

1

Tôi không biết các hoạt động bên trong của sự kiện bàn phím GMail chụp, nhưng gần đây tôi đã viết một đơn giản bàn phím shortcut navigator (vì vậy tôi không cần phải sử dụng chuột để nhấp vào liên kết) cho Chrome.

Đây không phải là tiện ích mở rộng, mà là tập lệnh người dùng/Greasemonkey nhưng được kích hoạt bằng cách nhập dấu phẩy (,) hai lần và hoạt động trong Gmail.

Có thể nó sẽ giúp bạn xem xét nguồn. Bạn có thể tải xuống tại đây: http://userscripts.org/scripts/show/68609

+0

Cảm ơn tôi sẽ có một cái nhìn và cố gắng để có được những gì tôi cần. Tôi sẽ cập nhật nếu tôi làm. –

+4

Ok, tôi đã tìm ra. Hóa ra nó không thực sự liên quan đến việc Gmail ghi lại sự kiện và tự giữ nó: có một cài đặt các tiện ích mở rộng của Chrome giúp kịch bản khớp với tất cả các khung hoặc chỉ là khung đầu. Nó mặc định chỉ là cái đầu và Gmail sử dụng iframe. Vì vậy, kịch bản của tôi không được tải ở nơi cần thiết. (http://code.google.com/chrome/extensions/content_scripts.html) Cảm ơn ví dụ làm việc, nó đã giúp tôi đào sâu hơn. –

+0

Tuyệt vời! ... và chúc may mắn! –

0

Bạn có thể thử một quá trình chuyển hướng:

if (document.body.onkeypress) { 
    // add as event listener instead 
    var kpfunc = document.body.onkeypress; 
    document.body.addEventListener('keypress', kpfunc, true); 
} 
+0

'document.body.onkeypress' trả về null mặc dù. Hai phương pháp tạo nên sự khác biệt nào? Trong nghi ngờ, tôi đã cố gắng làm 'document.body.onkeypress = function() {alert ('sdf');}' cũng như 'window.onkeypress' không có kết quả tốt hơn. –

1

OK Tôi có giải pháp làm việc, được thiết kế ngược từ plugin onePassword. Tôi chỉ có thể đoán là tại sao nó lại hoạt động, tôi đoán nó là do thêm sự kiện vào các phần tử đầu vào. Tuy nhiên Thay đổi bất cứ điều gì và nó ngừng hoạt động (các cuộc gọi chuyển hướng ở phía dưới là ở phía dưới cho một lý do)

function redir(e) { 
    e.focus(); 
    var h = document.createEvent("KeyboardEvent"); 
    h.initKeyboardEvent('keydown', true, true); 
    e.dispatchEvent(h) 
} 
$("input").each(function(t,l) {redir(l)}); 

document.addEventListener('keydown', function(e) { 
    if (e.ctrlKey && e.keyCode) { 
     if (e.keyCode == 190) { 
     chrome.extension.sendRequest({name: "spot-openPopUp"}); 
     } 
    } 
},false); 

redir(document.body); 

Như bạn thấy tôi đã sử dụng chuyển hướng. Ví dụ này thực sự là btw thô nên không chỉ sử dụng nó

+0

Bạn có thể xem qua những gì tôi đã làm: https://github.com/Timothee/LogMeOutThx/blob /master/Chrome%20extension/content_script.js (lưu ý: đây vẫn là công việc đang tiến hành ;-)) Tôi không cần thực hiện bất kỳ chuyển hướng nào. Điều chính bị thiếu đối với tôi là trong bản kê khai: https://github.com/Timothee/LogMeOutThx/blob/master/Chrome%20extension/manifest.json và thêm "all_frames": true –

+0

Quên đề cập đến, tôi cũng đã phải thêm all_frames. Cảm ơn các liên kết – Thomas

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