아래 예제는 window.parent. [turn designmode on] (이 작동)을 사용하는 iframe의 간단한 예입니다. FF에서는 모든 것이 잘되지만 IE8 (깜짝 놀람)에서는 iframe을 클릭 할 때 선택 사항이 손실됩니다. 이것은 iframe 외부의 도구 사용을 완전히 무효화합니다. 나는 당신은 iframe이 포커스를 잃을 때 선택을 저장 시도 할 수 IE8 http://www.chromedigital.co.za/hydrapage/test.htmIE8 iframe DesignMode가 선택을 잃습니다.
답변
의 해결 방법 4 일 후 ...
열기를 찾을 수 없습니다. 사용자가 포커스를 다시 받기 전에 iframe의 내용이 변경되지 않는다고 확신하는 경우 현재 선택된 Range
또는 TextRange
을 저장할 수 있습니다. (메인 페이지) 다음 스크립트는 원래 스크립트가 포함되어 광범위하게 테스트되지 않고 더 나은 특징 검출 개선 될 수 있지만, 작업 할 무언가이다 : 당신이하지 원하는 주 문서에있는 모든 요소에
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;
}
}
도대체 어떻게 이것이 downvoted되었습니다 ?? 질문에 완전히 답할뿐만 아니라 글쓰기에 많은 노력을 기울였습니다. –
안녕하세요, Tim - 여기에 대한 귀하의 노력에 감사드립니다 - 내가 제공 한 데모는 선택의 손실을 나타 내기위한 것이 었습니다 - 실제 코드는 저장 및 처리를 수행합니다 - 그러나 이것이 버그 또는 네이티브 동작인지 여부를 ie8에서 결정하고자합니다 .그 버그가 아니라면 - 코드를 잘못 사용하면 (그러나 선택을 유지하기 위해이 여분의 오버 헤드가있는 것은 수치 스럽습니다) - 편집을 게코로 제한 할 수 있습니다. ie 불어 –
제공된 데모 크레스 센트 레스를 지우고 있습니다. 거기에 해결책이 있습니다 - 그 버튼은 선택을 죽이지 않습니다 - 내 업데이 트에 나쁜 업데이 트가 ... –
내 편집 상자 이미지, 당신이 마지막으로 iframe에 클릭하고 IE6, IE7과 FF 작동 테이블 등을 추가 할 수 있지만, IE8 것이 시작 부분에 다음 추가합니다. 그런 다음 잘라내어 원하는 위치에 붙여 넣을 수 있지만 이는 불편합니다. 더 심각한 것은 예를 들어 표 셀의 속성을 변경하려고 할 때 강조 표시해야하는 셀에 텍스트가 있어야하거나 현재 어떤 요소가 있는지 확인할 수 없다는 것입니다.
Microsoft에 선택 방법에 대한 버그 수정이 있습니까? 아니면 Firefox 또는 이전 버전, 즉 유일한 과정입니까?
감사합니다. 마이크 W
당신은 질문 으로이 질문하고 싶지 수도 있습니다. –
- 1. 포커스가 없어지면 Treeview 항목이 선택을 잃습니다
- 2. IE8, iframe 및 불필요한 스크롤 막대
- 3. IFrame (IE8)에 교차 도메인 콘텐츠 표시
- 4. jquery UI 대화가 두 번째 호출 (IE8)에서 값을 잃습니다
- 5. IE는 iframe 형식의 대상에서 자동 UTF-8 인코딩을 잃습니다.
- 6. iframe.contentWindow on IE8?
- 7. 동적으로 생성 된 이미지가 아닌 로딩은 iframe IE8
- 8. IE8
- 9. IE8
- 10. ComboBox의 ItemTemplate 컨트롤이 바인딩을 잃습니다.
- 11. Selenium + IE8 : 강제 IE8 호환성보기
- 12. PHP 세션이 정보를 잃습니다
- 13. LINQ InsertOnSubmit이 서식을 잃습니다.
- 14. UITextField가 포커스 이벤트를 잃습니다
- 15. 메인 페이지에서 포커스를 잃습니다.
- 16. ASP.Net RadioButton이 ViewState를 잃습니다
- 17. Firefox가 콘텐츠를 잃습니다. 위치로드
- 18. Iframe 내용 인쇄
- 19. datagrid datasource에 항목을 추가하여 viewstate를 잃습니다.
- 20. OracleDataReader가 검사 후 결과를 잃습니다.
- 21. WPF D3DImage가 프런트 버퍼를 잃습니다.
- 22. 외국 문자가 분음 부호를 잃습니다.
- 23. RadioButtonList가 버튼에서 값을 잃습니다. 클릭
- 24. Delphi 응용 프로그램이 포커스를 잃습니다
- 25. ResultSet은 첫 번째 값을 잃습니다.
- 26. 숨겨진 YouTube 플레이어가 메소드를 잃습니다.
- 27. CLEditor - maxlength에 도달하면 초점을 잃습니다.
- 28. WPF ContextMenu가 하위 항목을 잃습니다.
- 29. setTimeout을 사용하는 메서드가 범위를 잃습니다.
- 30. NSButton의 이미지가 선택시 투명도를 잃습니다.
잘못하고 있습니다. IE8에서이'contenteditable' 데모를보십시오 : http://www.quirksmode.org/dom/execCommand/ 편집 가능한 영역을 위해 iframe을 사용하고 모든 계정에서 잘 작동합니다. –
이해가 안됩니다. 원래 질문에서 designMode를 설정하는 코드로 확신하지는 못했지만, 링크 한 데모는이 질문에서 요구하는 선택 사항과 정확히 동일한 동작을 나타냅니다. –
@Tim : IE8은 없지만 IE7이 있고 데모는 상단 버튼과 상호 작용할 때 선택을 잃지 않습니다. Johnny는 IE8에서 합법적 인 버그를 발견했을 수 있습니다. @ 조니, 데모 한번 해봤 니? –