我在summernote中遇到了问题。
Codepen:Here
当前行为:Safari / Firefox - 粘贴图片时,它只显示Pasting Not ALLowed,但在Chrome上,它会显示Pasting Not Allow和图片粘贴。
预期行为:完全禁用图片粘贴。
这似乎与Chrome中的粘贴事件有关。
我想防止粘贴图片,所以我在e.preventDefault中添加了,但chrome仍粘贴图像。下面是我的代码和我的一些console.log来调试行为。还有其他任何阻止铬粘贴的方法吗?
$('#summernote').summernote({
height: 300,
minHeight: 300,
toolbar: [
// [groupName, [list of button]]
['style', ['bold', 'italic', 'underline', 'clear']],
['fontsize', ['fontsize']],
['para', ['ul', 'ol', 'paragraph']],
['insert',['link','picture']]
],
callbacks : {
onPaste: function (e) {
e.preventDefault();
console.log('pasting'); // Chrome shows This
var bufferText = ((e.originalEvent || e).clipboardData || window.clipboardData).getData('Text'); //This actually removes the image because image is not text.
console.log(bufferText); //Chrome Shows Empty
console.log(typeof bufferText); //Chrome Shows String
console.log(bufferText.length); //Chrome Shows 0
if (bufferText.length == 0) {
console.log ('in if loop'); //Chrome Shows this in Console
document.execCommand('insertText', false, 'Paste Not Allowed'); //Chrome wrote "Paste Not Allowed" in contenteditable but the image still get pasted.
return false;
}
if (!bufferText)
return true;
document.execCommand('insertText', false, bufferText);
}
}
});
更新:抛出新错误以防止默认。
目前这是我暂时做的。如果只有某人可以建议一种更好的方法,而不是抛出错误来停止默认操作。
看来这个安全设置/ chrome浏览器,我必须添加一些东西来获取bufferText
var bufferText = ((ne.originalEvent || ne).clipboardData || window.clipboardData).getData('text/plain') || null;
if (bufferText == null) {
throw new Error("Cannot Paste Image");
}
通过抛出新错误,我可以停止发布图像,但我可以允许所有其他形式的文本。
答案 0 :(得分:1)
在你回调onPaste
的最后,添加return false;
它应该有用。这就是我使用的方式,而不是e.preventDefault()