10

Klavye kısayoluyla bir komut dosyasını başlatan bir Chrome uzantısı yazıyorum. Çoğu sayfada iyi çalışıyor, ancak Gmail’de bunun olmadığını fark ettim: Görünüşe göre, tüm klavye olayları Gmail tarafından ele geçirildi ve işlevlerime kadar kabarcıklanmadı.Gmail, tüm klavye olaylarını ele geçiriyor gibi görünüyor. Buralarda dolaşmanın bir yolu var mı?

ben (tabii basitleştirilmiş) olan bir içerik komut dosyası (Chrome uzantısında bu istediğiniz herhangi bir sayfaya eklenir) vardır:

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

Ama aslında, Gmail beni hayal kırıklığına yapar. komut dosyasının yüklendiğini biliyorum. window.addEventListener'un farklı varyasyonlarını ve diğer etkinlik türlerini boşa çıkarmaya çalıştım.

Bunu aşmanın bir yolu var mı? GreaseMonkey komut dosyasının bunu yapıp yapamayacağını görmeye çalıştım, bu da beni buraya getirdi: http://code.google.com/p/gmail-greasemonkey/ Ancak bu bana yardımcı olmadı.

Teşekkürler!

+0

Tüm kullanıcılarınızdan Gmail ayarlarında klavye kısayollarını devre dışı bırakmalarını isteyebilirsiniz. Ama bundan hoşlanmayabilirler. Ve yine de işe yarayacağından emin değilim. – MatrixFrog

+1

Hayır, bu gerçekten mümkün değil. Uzantım çok dürüst değil, bu yüzden bu ticareti yapan kimseyi hayal edemiyorum. Ayrıca, şu anda tek kullanıcı benim, bu yüzden istemiyorum :) –

cevap

1

Ben GMail'in klavye olay yakalama iç işleyişini bilmiyorum ama son zamanlarda basit bir klavye kısayolu denizci yazdı Chrome için bağlantıları tıklamak için fareyi kullanın).

Bu bir uzantı değil, bir kullanıcı/Greasemonkey betiği, ancak iki kez virgülle yazılıyor (,) ve GMail'de çalışıyor.

Belki de kaynağa bakmanıza yardımcı olur. Buradan indirebilirsiniz: http://userscripts.org/scripts/show/68609

+0

Teşekkürler Bir göz atacağım ve ihtiyacım olanı bulmaya çalışacağım. Yaparsam güncellenirim. –

+4

Tamam, anladım. Gmail'in bu etkinliği yakalamak ve kendisini saklamakla ilgili olmadığı ortaya çıktı: Komut dosyası, tüm kareleri veya yalnızca en üstteki eşleşmeyi sağlayan bir Chrome uzantısı ayarı var. Varsayılan olarak yalnızca en üstte bulunur ve Gmail iframe'leri kullanır. Bu yüzden benim komutum gereken yere yüklenmedi. (http://code.google.com/chrome/extensions/content_scripts.html) Çalışan örnek için teşekkürler, daha fazla kazmamı sağladı. –

+0

Harika! ... ve iyi şanslar! –

0

Sen yönlendirme süreci deneyebilirsiniz: o yüzden gerek yok (

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

'document.body.onkeypress' null verir. İki yöntem ne gibi bir fark yaratıyor? Şüphesiz, daha iyi sonuçlarla 'document.body.onkeypress = function() {alert ('sdf');}' yanı sıra 'window.onkeypress' yapmayı denedim. –

1

Tamam Bir çalışma çözümüm var, onePassword eklentisinden ters mühendislik. Sadece bunun neden işe yaradığını tahmin edebilirim, olayın girdi unsurlarına eklenmesi nedeniyle olduğunu düşünüyorum. Eğer ben yeniden yönlendirme kullanılan görebileceğiniz gibi Ancak

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); 

şey değiştirin ve (alt bir nedeni altta olduğu üzerinde Redir çağrıyı) çalışma durana. Bu örnek gerçekten ham btw'dir, bu yüzden kullanmayın sadece

+0

Yaptığım şeye bir göz atabilirsin: https://github.com/Timothee/LogMeOutThx/blob /master/Chrome%20extension/content_script.js (not: bu hala devam eden bir iştir ;-)) Yine de herhangi bir yönlendirme yapmam gerekmiyordu. Benim için eksik olan en önemli şey şuydu: https://github.com/Timothee/LogMeOutThx/blob/master/Chrome%20extension/manifest.json ve "all_frames" ekleme: true –

+0

Unutmuyorum, ayrıca all_frames eklemek zorunda kaldı. Linkler için teşekkürler – Thomas

İlgili konular