1

我在 iPad 上的 Safari 中遇到了严重问题。新的 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>
...

通过在文档的某处添加 touchmove,可编辑内容在 touchmove 后无法再编辑(按住手指以获取放大镜)。可以设置光标,但不再允许通过屏幕键盘输入。

测试脚本(iPad + iOS5): http: //flyingdog.biz/tests/ipad/test2.html

另一个正在运行的测试脚本:http: //flyingdog.biz/tests/ipad/test1.html

正如您在其他脚本中看到的那样,我在 iFrame 前面放了几行文本 - 非常奇怪!我正在寻找另一种/更好的解决方法,还是我做错了什么?如果没有 touchmove 事件,它可以工作,但我需要它来获得良好的编辑体验。

4

1 回答 1

3

我找到了解决此错误的方法:似乎 iframe 文档在触摸事件后失去了焦点,尤其是在出现复制和粘贴菜单时。要解决此错误,请将 keydown 事件处理程序添加到 iframe-document 并将焦点重置到文档:

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

这主要为我修复了这个错误。只有当用户键入非常快(例如在连接的蓝牙键盘上)时,才会发生一些击键丢失的情况,因为 javascript keydown 处理程序的执行在 iPad 上有点延迟。

于 2013-01-07T16:18:39.677 回答