يبدو أن Gmail لالتقاط جميع أحداث لوحة المفاتيح. أي طريقة للتجول في ذلك؟

StackOverflow https://stackoverflow.com/questions/2323949

سؤال

أنا أكتب امتدادًا للكروم يطلق برنامجًا نصيًا مع اختصار لوحة المفاتيح. إنه يعمل بشكل جيد في معظم الصفحات ، لكنني أدركت أنه في Gmail لا: يبدو أن جميع أحداث لوحة المفاتيح يتم التقاطها بواسطة Gmail ولا تتواصل مع وظيفتي.

لديّ برنامج نصي للمحتوى (في امتداد Chrome يتم إضافة هذا إلى أي صفحة تريدها) (مبسطة بالطبع):

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

ولكن في الواقع ، لا تخذلني Gmail. أعلم أن السيناريو هو محمل. حاولت اختلافات مختلفة من window.addEventListener وأنواع الأحداث الأخرى دون جدوى.

هل يعرف أي شخص طريقة لتجاوز هذا؟ حاولت أن أرى ما إذا كان بإمكان Greasemonkey Script القيام بذلك ، مما جعلني هنا: http://code.google.com/p/gmail-greasemonkey/ لكن هذا لم يساعدني.

شكرًا!

هل كانت مفيدة؟

المحلول

لا أعرف الأعمال الداخلية لحدث لوحة المفاتيح في Gmail ، لكنني كتبت مؤخرًا Navigator اختصار لوحة المفاتيح (لذلك لا يتعين علي استخدام الماوس للنقر على الروابط) للكروم.

إنه ليس امتدادًا ، ولكنه نص مستخدم/Greasemonkey ، ولكنه يتم تشغيله عن طريق كتابة الفاصلة (،) مرتين ، ويعمل في Gmail.

ربما سيساعدك ذلك على النظر إلى المصدر. يمكنك تحميله من هنا: http://userscripts.org/scripts/show/68609

نصائح أخرى

حسنًا ، لدي حل عمل ، تم هندسة عكسية من المكون الإضافي OnePassword. لا يمكنني إلا أن أخمن سبب عمل هذا ، فأنا أدى إلى إضافة الحدث إلى عناصر الإدخال. ومع ذلك ، قم بتغيير أي شيء ويتوقف عن العمل (مكالمة Redir في القاع في الأسفل لسبب ما)

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

كما ترون أنني استخدمت إعادة التوجيه. هذا المثال هو الخام حقًا راجع للشغل ، لذا لا تستخدمه فقط

يمكنك تجربة عملية إعادة التوجيه:

if (document.body.onkeypress) {
    // add as event listener instead
    var kpfunc = document.body.onkeypress;
    document.body.addEventListener('keypress', kpfunc, true);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top