Событие touchmove в Safari / iOS5 / iPad отключает contenteditable - есть ли обходной путь? - PullRequest
1 голос
/ 03 ноября 2011

У меня серьезная проблема в Safari на iPad.Новые contenteditable функции, кажется, не работают с событием touchmove!код:

 ...
 <script>
function doNothing(event) { return; }

function initIFrame() {
    var iframe=document.getElementById("iframeedit");
    iframe.contentWindow.document.designMode="on";      
    iframe.contentWindow.document.addEventListener("touchmove", doNothing, true);
}
</script>
</head>
<body onload="initIFrame()">
<iframe style="width:500ppx;height:200px" src="content.html" id="iframeedit"></iframe>
...

При добавлении сенсорного перемещения в документ редактируемое содержимое больше не может быть отредактировано после сенсорного перемещения (удерживайте палец, чтобы получить лупу).Курсор можно установить, но ввод с помощью экранной клавиатуры больше не разрешен.

Тестовый скрипт (для iPad + iOS5): http://flyingdog.biz/tests/ipad/test2.html

Другой работающий тестовый скрипт: http://flyingdog.biz/tests/ipad/test1.html

Как вы можете видеть в этом другом сценарии, я поместил несколько строк текста перед iFrame - очень странно!Я ищу другой / лучший обходной путь или я сделал что-то не так?Без события touchmove это работает, но мне это нужно для хорошего опыта редактирования.

1 Ответ

3 голосов
/ 07 января 2013

Я нашел обходной путь для этой ошибки: кажется, что документ iframe теряет фокус после события касания, особенно когда появляется меню копирования и вставки.Чтобы обойти эту ошибку, добавьте обработчик события keydown в iframe-document и сбросьте фокус на документ:

var iframeDoc = $(iframe.contentWindow.document);
iframeDoc.keydown(function(event) {
    iframe.contentWindow.focus();
});

Это исправляет ошибку в основном для меня.Только если пользователь печатает очень быстро (например, на подключенной клавиатуре Bluetooth), может случиться, что некоторые нажатия клавиш будут потеряны, потому что выполнение обработчика нажатия клавиши javascript на iPad немного задерживается.

...