2013-05-30 3 views
2

Вот что я нашел: http://jsfiddle.net/jwvha/211/Вставка HTML под курсором в IFRAME

Этот пример очень хорошо работает во всех браузерах (в IE6 ~ IE10, Chrome, Firefox и т.д.).

Я изменил его на работу в плавающем фрейме, вот мой приблизительный код:

insertHtml : function(html){   
    iframe.contentWindow.focus() 
    var sel, range; 
    if (iframe.contentWindow.getSelection) { 
     sel = iframe.contentWindow.getSelection(); 
     if (sel.getRangeAt && sel.rangeCount) { 
      range = sel.getRangeAt(0); 
      range.deleteContents(); 

      var el = document.createElement("div"); 
      el.innerHTML = html; 
      var frag = document.createDocumentFragment(), node, lastNode; 
      while (node = el.firstChild) { 
       lastNode = frag.appendChild(node); 
      } 
      range.insertNode(frag); 

      if (lastNode) { 
       range = range.cloneRange(); 
       range.setStartAfter(lastNode); 
       range.collapse(true); 
       sel.removeAllRanges(); 
       sel.addRange(range); 
      } 
     } 
    } else if (iframeDocument.selection && iframeDocument.selection.type != "Control") { 
     // IE < 9 
     iframeDocument.selection.createRange().pasteHTML(html); 
    } 
} 

Это очень хорошо работает в IE6 - IE8, но в IE9 и IE10 я получаю следующее сообщение об ошибке:

SCRIPT5022: WrongDocumentError

на этой линии: range.insertNode(frag);

Я не знаю, почему это произошло, и как разрешить его, так что я должен был использовать свой сломанный английский язык, чтобы обратиться за помощью.

ответ

3

Похоже, вы создаете новый фрагмент для текущего документа, а затем пытаетесь добавить его в IFrame. Попробуйте создать свои элементы следующим образом:

var el = iframe.contentDocument.createElement("div"); 
el.innerHTML = html; 
var frag = iframe.contentDocument.createDocumentFragment(), node, lastNode; 
+0

Большое спасибо! Оно работает! – user2435742

Смежные вопросы