Захват нажатия клавиш, направляющий на определенный элемент в Chrome
Я создаю приложение чата и пытаюсь убедиться, что каждый раз, когда пользователь нажимает клавишу, клавиша, которую он нажимает, в конечном итоге попадает в определенный элемент (редактируемый HTML-документ ui.rte1Content в iframe ui.rteIFrame, чтобы быть точным). Это должно происходить независимо от того, какой элемент на странице в данный момент имеет фокус. Я забочусь только о поддержке Firefox и Chrome.
Пока что я зарегистрировал обработчик для события window.onkeydown:
function captureKeyDown(e) {
console.log("Capturing: " + e.keyCode);
// We ignore certain keys such as page up, as well as keys pressed with
// alt or ctrl, except for a few select combos like ctrl+b
if(!ignoreKeys.contains(e.keyCode) && !e.altKey &&
(!e.ctrlKey || (e.ctrlKey && validCtrlKeys.contains(e.keyCode)))) {
ui.rte1Content.focus(); // Chrome prefers this.
if(!rteHasFocus) {
ui.rteIFrame.focus(); // Firefox prefers this
}
//alert("A commented out alert");
}
}
Это прекрасно работает в Firefox: rteIFrame получает фокус, нажатая клавиша появляется, и мы продолжаем. Однако в Chrome (23.0.1271.95), хотя rte1Content правильно фокусируется на времени, чтобы появилась буква NEXT, начальная буква, которая первой вызвала событие, исчезает в эфире.
Для чего это стоит, если я раскомментирую сообщение с предупреждением, письмо прекрасно отображается в Chrome. Я понятия не имею, почему это так.
У кого-нибудь есть какие-либо предложения о том, как я могу заставить это работать?
1 ответ
Для "alert()" это просто потому, что в Chrome фокус теряется при возникновении alert (). Чтобы проверить это, попробуйте открыть консоль JavaScript (CTRL+SHIFT+J в Chrome, CTRL+SHIFT+K в Firefox), выбрать что-то или сосредоточиться на чем-то на любой странице, а затем ввести в консоли alert("test");
Ты увидишь, что фокус потерян. Затем попробуйте в Firefox, фокус сохраняется.
Также я чувствую, что ты делаешь вещи сложным образом, ахах! Почему бы просто не использовать <textarea>
тег для хранения ввода с клавиатуры? Кроме того, если вы планируете создать приложение для чата, передавая данные через iframe с использованием техники COMET или, возможно, с каким-либо длинным пулом и т. Д., Я действительно рекомендую вам использовать Google WebSockets, поскольку вы сможете создать более современный и оптимизированный чат. с этим. Это было бы прекрасно и в вашем случае, потому что вы хотите сосредоточиться только на Firefox и Chrome, двух браузерах, которые правильно поддерживают WebSockets.:)