2016-07-03 9 views
2

summernoteのcontenteditableに問題があります。onPaste e.preventDefault Chromeでのエラー

Codepen:http://codepen.io/anon/pen/LkLYvV

現在の行動:サファリ/ Firefoxの - ペーストのイメージ、それだけで貼り付けが許可されていない示しているが、Chromeで、それが貼り付けは、画像ペーストと一緒に許可していないを示しています。

予想される動作:イメージの貼り付けを完全に無効にします。

これはChromeの貼り付けイベントに関する問題を指摘しているようです。

イメージの貼り付けを防止したいので、私はe.preventDefaultに追加しましたが、まだクロムはイメージを貼り付けています。以下は私のコードと私の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); 
      } 

     } 


    }); 

更新:preventDefaultに新しいエラーを投げます。

現在、私はこれを一時的に行っています。デフォルトのアクションを停止するためにエラーをスローするよりも、誰かがより良い方法を提案できる場合。

このセキュリティ設定/ Chromeブラウザ、私は画像の掲載を停止することができる午前新しいエラーをスローすることによりbufferText

var bufferText = ((ne.originalEvent || ne).clipboardData || window.clipboardData).getData('text/plain') || null; 

     if (bufferText == null) { 
      throw new Error("Cannot Paste Image"); 

     } 

を得るために何かを追加する必要がありますように見えますが、私はすべてを許可することができます他の形式のテキスト。

答えて

0

コールバックonPasteの末尾には、return false;を入力する必要があります。それは私が代わりに使う方法ですe.preventDefault()

関連する問題