contenteditable
の貼り付けイベントを処理して、貼り付け前にすべてのHTMLマーカーをクリーンアップします。 Firefox
とChrome
ではすべて正常に機能します。しかし、コードをIE11
でテストすると、渡されたevent object
はClipboardEvent
ではなくDragEvent
です。
私のコードに何か問題がありますか?以下のコードとしてリスナーを追加した場合、クリップボードイベントを取得する必要があります。なぜドラッグが発生するのですか?
editable.addEventListener('paste', pasteHandler, false);
http://jsfiddle.net/vepo/4t2ofv8n/
上記の例をテストするために、ChromeからテキストをコピーしてIEに貼り付けます。しかし、IEからテキストをコピーすると、同じエラーが発生します。
[〜#〜]編集[〜#〜]
$(document).ready(function(){
var editable = document.getElementById('editable-div');
var pasteHandler = function(e){
if(e.clipboardData && e.clipboardData.getData) {
var pastedText = "";
if (window.clipboardData && window.clipboardData.getData) { // IE
pastedText = window.clipboardData.getData('Text');
} else if (e.clipboardData && e.clipboardData.getData) {
pastedText = e.clipboardData.getData('text/plain');
}
alert(pastedText);
}
else{
alert('Not paste object!');
}
};
editable.addEventListener('paste', pasteHandler, false);
});
ここでは、IEバージョンと他のブラウザも処理します。
e.clipboardData
IEでは常にnullだったので、これを思いつきました。
var pastedText = '';
if (typeof e.clipboardData === 'undefined')
pastedText = window.clipboardData.getData('Text')
else
pastedText = e.clipboardData.getData('text/plain')
e.originalEvent.clipboardData.getData('text/plain')
は、Safari、chrome、firefox、safariで機能し、Ipadではchrome.
window.clipboardData.getData('text')
はInternetExplorerとEdgeで機能します。
注:e.originalEvent.clipboardData.getData('text')
はデスクトップブラウザでは機能しますが、モバイルブラウザでは機能しません。
だから結局私はこれを使いました
var clipText;
if (e.originalEvent.clipboardData !== undefined){
clipText = e.originalEvent.clipboardData.getData('text/plain')
} else {
clipText = window.clipboardData.getData('text')
}
$("element").on('paste', function (e)
{
if (window.clipboardData)
{
pastedText = window.clipboardData.getData('Text')
}
else if (e.clipboardData || e.originalEvent.clipboardData != undefined)
{
pastedText = e.originalEvent.clipboardData.getData('text/plain')
}
}
});