1

iPadのSafariで深刻な問題が発生しました。新しいコンテンツ編集機能は、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();
});

これにより、主にバグが修正されます。ユーザーが非常に速く入力した場合 (接続された Bluetooth キーボードなど) にのみ、一部のキーストロークが失われることがあります。これは、JavaScript のキーダウン ハンドラーの実行が iPad で少し遅れるためです。

于 2013-01-07T16:18:39.677 に答える