2012-06-14 22 views
5

contenteditable<div>を使用してカスタムWYSIWYGエディタを実装しようとしています。TinyMCEのforced_root_blockオプション

私が直面している主な問題の1つは、ブラウザが処理する一貫性のない方法です。ENTERキーストローク(改行)です。 Chromeは<div>を挿入し、Firefoxは<br>を挿入し、IEは<p>を挿入します。私はTinyMCEを見ていて、forced_root_blockという設定オプションがあります。 forced_root_blockからdivに設定すると、実際にはすべての主要なブラウザで機能します。誰かがTinyMCEのforced_root_blockオプションがブラウザ間でどのように実現できるのか知っていますか?あなたは次のことを見つけるだろうTinyMCEのソース(/tiny_mce/classs/dom/DomParser.js)で

+0

+1良い質問 – Thariama

答えて

2

rootBlockName = "forced_root_block" in args ? args.forced_root_block : settings.forced_root_block; 

     whiteSpaceElements = schema.getWhiteSpaceElements(); 
     startWhiteSpaceRegExp = /^[ \t\r\n]+/; 
     endWhiteSpaceRegExp = /[ \t\r\n]+$/; 
     allWhiteSpaceRegExp = /[ \t\r\n]+/g; 

     function addRootBlocks() { 
      var node = rootNode.firstChild, next, rootBlockNode; 

      while (node) { 
       next = node.next; 

       if (node.type == 3 || (node.type == 1 && node.name !== 'p' && !blockElements[node.name] && !node.attr('data-mce-type'))) { 
        if (!rootBlockNode) { 
         // Create a new root block element 
         rootBlockNode = createNode(rootBlockName, 1); 
         rootNode.insert(rootBlockNode, node); 
         rootBlockNode.append(node); 
        } else 
         rootBlockNode.append(node); 
       } else { 
        rootBlockNode = null; 
       } 

       node = next; 
      }; 
     }; 

これは明らかに、ルートブロック要素を作成するの面倒を見ます。 私はtinymceが 'Enter'キーストロークを処理し、伝播/デフォルトブラウザコマンドを停止することを99%確信しています。

+0

はい、あなたは正しいです。私はtinymceのソースコードをより深く見ていました。彼らには 'EnterKey.js'というクラスがあります。このクラスのmain関数は 'handleEnterKey'です。 Tinymceは – Amrit

+0

を確認してくれてありがとう、それは私が思ったことだ – Thariama