IE8 iframe DesignMode loses choice

The example below is a simple iframe example that uses window.parent. [turn designmode on] (this works). Everything is fine in FF, but in IE8 (unexpected surprise), any choices you make are lost when you exit the iframe. This completely negates the use of tools outside the iframe. I can not find a solution after 4 days ...

Open in IE8 http://www.chromedigital.co.za/hydrapage/test.htm

+5
source share
3 answers

In any element of the main document you want not to break the iframe selection, add unselectable="on".

For example:

<div onclick="makeBold()" unselectable="on">Bold</div>
+12
source

, iframe . , iframe , , Range TextRange. script ( ) script, , - :

h_FF=!document.all
h_rt_F=0

function HLC_DM()
{
 h_rt_F=document.getElementById("moo").contentWindow
 if(h_FF)
 {
  if(h_rt_F.document.designMode!="on")
  {
   try
   {
    h_rt_F.document.designMode="on"
    h_rt_F.document.execCommand("redo",false,null)
    createEventHandlers();
   }
   catch(e)
   {
    setTimeout("HLC_DM",200)
    return false
   }
  }
 }
 else
  h_rt_F.document.body.contentEditable=true
  createEventHandlers();
}


function getContentWindow() {
 return document.getElementById("moo").contentWindow;
}

function saveSelection() {
 var win = getContentWindow();
 var doc = win.document;
 var sel = win.getSelection ? win.getSelection() : doc.selection;
 var range;

 if (sel) {
  if (sel.createRange) {
   range = sel.createRange();
  } else if (sel.getRangeAt) {
   range = sel.getRangeAt(0);
  } else if (sel.anchorNode && sel.focusNode && doc.createRange) {
   // Older WebKit browsers
   range = doc.createRange();
   range.setStart(sel.anchorNode, sel.anchorOffset);
   range.setEnd(sel.focusNode, sel.focusOffset);

   // Handle the case when the selection was selected backwards (from the end to the start in the
   // document)
   if (range.collapsed !== sel.isCollapsed) {
    range.setStart(sel.focusNode, sel.focusOffset);
    range.setEnd(sel.anchorNode, sel.anchorOffset);
   }
  }
 }
 return range;
}

function restoreSelection(range) {
 var win = getContentWindow();
 var doc = win.document;
 var sel = win.getSelection ? win.getSelection() : doc.selection;

 if (sel && range) {
  if (range.select) {
   range.select();
  } else if (sel.removeAllRanges && sel.addRange) {
   sel.removeAllRanges();
   sel.addRange(range);
  }
 }
}

var selectedRange;

function blurHandler() {
 selectedRange = saveSelection();
}

function focusHandler() {
 if (selectedRange) {
  restoreSelection(selectedRange);
 }
}

var iframeHandlersCreated = false;
function createEventHandlers() {
 // Prevent setting up twice
 if (!iframeHandlersCreated) {
  var iframe = document.getElementById("moo");
  var doc;
  if (iframe.contentDocument && iframe.contentDocument.addEventListener) {
   doc = iframe.contentDocument;
   doc.addEventListener("blur", blurHandler, false);
   doc.addEventListener("focus", focusHandler, false);
  } else if (iframe.attachEvent) {
   iframe.attachEvent("onbeforedeactivate", blurHandler);
   iframe.attachEvent("onfocus", focusHandler);
  }
  iframeHandlersCreated = true;
 }
}
+3

My Editbox , .., iframe, ie6, ie7 FF, ie8 . , , . , , , , , , !

Microsoft Firefox , .. ?

W

0

All Articles