Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Chrome, AddEventListener и onPaste


Автор: Frozen_Coyote 8.8.2011, 12:47
Добрый день, 

тут случилась следующая неурядица у меня: понадобилось мне перехватывать вставку некого контента в iframe. IE обладает возможностью обработки собтия onPaste через AddEventListener и поэтому с ним никаких проблем не возникло. Но вот Хром в данном случае выссказал полное непонимание, чего от него хотят, в следствие чего я решил сотворить небольшое эмулирование процесса

Код

iframeDocument.addEventListener('keyup', function(e)
{
var cc = (e.which) ? e.which : event.keyCode;
// если нажата комбинация CTRL + V - стартует функция, которая что то там делает, неважно
if(e.keyCode == "86" && e.ctrlKey)
{
fnPaste(e, iframe_id);
}
}, true );


непорядок заключается в том что если при нажатии вышеозначенной комбинации пользователь отпускает ВНАЧАЛЕ клавишу V а затем CTRL - все работает так как я и планировал. Но вот если пользователь вначале отпускает клавишу CTRL а затем уж V - запуск функции не происходит.

вопрос прост: как бы мне обмануть Хром в этом плане или как еще надежно сто процентов перехватить вставку контента в поле iframe 

большое спасибо

Автор: Amphiluke 8.8.2011, 19:48
Перехватывать нажатие Ctrl+V — ненадежный способ. А Shift+Ins? А вставка через контекстное меню?
Вообще-то странно, что у вас в хроме не отлавливается событие paste. У меня в Webkit всё работает безупречно.
Код

iframe = document.getElementById("iframe_id_here");
if (iframe.contentWindow) iframe = iframe.contentWindow;
idoc = iframe.document;
idoc.designMode = "on";
idoc.addEventListener("paste", function() { alert("Hello!"); }, false);

Автор: Frozen_Coyote 9.8.2011, 10:17
Нет, само событие по факту отрабатывает, НО у меня ИЕ при отбработке onpaste запускает функцию ПОСЛЕ вставки контента, а Хром - ДО. Но в лбом случае Вы правы - я пошел немного другим путем и убрал перхват клавиш, оствив обработчик кейдаун.. сейчас буду смотреть - все ли нормально вышло ))
Спасибо! 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)