Показать сообщение отдельно
  #2 (permalink)  
Старый 21.04.2022, 20:15
Кандидат Javascript-наук
Отправить личное сообщение для Katy93 Посмотреть профиль Найти все сообщения от Katy93
 
Регистрация: 28.12.2018
Сообщений: 138

Разобралась сама, для начала стили нужно перенести в отдельный файл и добавить в body, тот который создается во время запуска скрипта, пример:
iHTML = "<html><head>";
iHTML += "<link rel=\"stylesheet\" type=\"text/css\" href=\"style2.css\">";
iHTML += "</head><body></body></html>";

Теперь с курсором. Он не фокусируется на нужном контейнере потому, что с первого раза не удалось получить нужный dom-узел. Поэтому также переделаем код.

var range = edit1.document.createRange();
         
         range.setStart(rangeElement.childNodes[0], 0);
         range.collapse(true);
         edit1.focus();
         var sel = edit1.document.getSelection();
        
         sel.removeAllRanges();
         sel.addRange(range);
         rangeElement.focus();

Итоговый результат:
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.js"></script>
</head>
<body>
<input type='button' class='btn-block' data-command='Bold' value='B'/><input type='button' class='btn-block' data-command='Italic' value='I'/>
<button type="button" class="btn-block" data-command="warning" title="Внимание">Внимание</button>
<button type="button" class="btn-block" data-command="important" title="Важно">Важно</button>
<button type="button" class="btn-block" data-command="info" title="Информация">Информация</button>
<button type="button" class="btn-block" data-command="advice" title="Совет">Совет</button>
<button type="button" class="btn-block" data-command="neutrality" title="Нейтральность">Нейтральность</button>
  <br />
  <iframe scrolling='no' frameborder='no' src='#' id='frameId' name='frameId'></iframe>

<form name="myform" action="#" method="post" onsubmit="return save()">
  <p>
    <input type="hidden" id="content" name="content" value="" />
  </p>
  <script type="text/javascript">
    let edit1;
    let doc;
    function init()
    {
      
  
      var isGecko = navigator.userAgent.toLowerCase().indexOf("gecko") != -1;
      console.log(isGecko);
      var iframe = document.getElementById("frameId");
      edit1 = iframe.contentWindow;
      doc = iframe.contentDocument;
      
      iHTML = "<html><head>";
      iHTML += "<link rel=\"stylesheet\" type=\"text/css\" href=\"style2.css\">";
      iHTML += "</head><body></body></html>";
      doc.open(); 
      doc.write(iHTML);
      doc.close(); 
      doc.designMode = "on"; 
      doc.body.contentEditable = true;
      
      
       $('.btn-block').on("click", function(e) {
          e.preventDefault();
          e.stopPropagation();
          
          let target = e.target;
          tag = target.firstChild;
          let myclass = "";
          
          if (target.getAttribute("data-command") === "Bold") {
              edit1.focus();
              edit1.document.execCommand("bold", null, "");
          }
          if (target.getAttribute("data-command") === "Italic") {
               edit1.focus();
               edit1.document.execCommand("italic", null, "");
          }
          if (target.getAttribute("data-command") === "warning") {
                    myclass = "warning shortcodestyle";
                    addBlock(myclass);
                    
         } else
        if (target.getAttribute("data-command") === "important") {
            myclass = "important shortcodestyle";
            addBlock(myclass);
        } else
        if (target.getAttribute("data-command") === "info") {
            myclass = "info shortcodestyle";
            addBlock(myclass);
        }
        if (target.getAttribute("data-command") === "advice") {
            myclass = "advice shortcodestyle";
            addBlock(myclass);
        }
        if (target.getAttribute("data-command") === "neutrality") {
            myclass = "neutrality shortcodestyle";
            addBlock(myclass);
         }
          
       });
       
       function addBlock(myclass)
       {
         var rangeElement = document.createElement("div");
         rangeElement.setAttribute("class", myclass);
         rangeElement.innerHTML = "<p><br></p>";
         
         doc.body.append(rangeElement);
         
         
         
         var range = edit1.document.createRange();
         
         range.setStart(rangeElement.childNodes[0], 0);
         range.collapse(true);
         edit1.focus();
         var sel = edit1.document.getSelection();
        
         sel.removeAllRanges();
         sel.addRange(range);
         rangeElement.focus();
      }
    }
    init();
    
   //});
  </script>
  <p>
  <input type="submit" value="Отправить" />
  </p>
  
</form>
</body>

P.S. При запуске скрипта стили по прежнему не видны, потому что они находятся в отдельном документе.
Ответить с цитированием