2009-09-24 16 views
5

नीचे दिया गया उदाहरण एक आईफ्रेम का एक साधारण उदाहरण है जो window.parent का उपयोग करता है। [Designmode चालू करें] (यह काम करता है)। एफएफ में सभी ठीक है, लेकिन आईई 8 (आश्चर्यचकित आश्चर्य) में जब आप आईफ्रेम से बाहर निकलते हैं तो कोई भी चयन खो जाता है। यह iframe के बाहर उपकरणों के उपयोग को पूरी तरह से अस्वीकार करता है। मैं नहीं आप चयन सहेजते जब आइफ्रेम ध्यान केंद्रित खो देता है की कोशिश कर सकते IE8 http://www.chromedigital.co.za/hydrapage/test.htmIE8 iframe DesignMode चयन खो देता है

+0

आप गलत कर रहे हैं। अपने IE8 में इस 'संतुष्ट' डेमो को आज़माएं: http://www.quirksmode.org/dom/execCommand/ यह संपादन योग्य क्षेत्र के लिए एक आईफ्रेम का भी उपयोग करता है, और सभी खातों से यह ठीक काम करता है। –

+0

मुझे समझ में नहीं आता है। जबकि मैं मूल प्रश्न में डिज़ाइन मोड को सेट करने के लिए कोड द्वारा आश्वस्त नहीं हूं, वहीं आपके द्वारा लिंक किए गए डेमो ने वही व्यवहार दिखाया है जो इस प्रश्न के बारे में पूछ रहा है। –

+0

@ टिम: मेरे पास IE8 नहीं है लेकिन मेरे पास आईई 7 है, और डेमो निश्चित रूप से शीर्ष बटन के साथ बातचीत करते समय * हार * चयन खो देता है। जॉनी को IE8 में एक वैध बग मिल सकता है। @ जॉनी, क्या आपने अभी तक डेमो की कोशिश की? –

उत्तर

12

iframe चयन को तोड़ने के लिए, unselectable="on" जोड़ें।

उदाहरण के लिए:

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

इसके लिए धन्यवाद - मुझे आश्चर्य है कि इसे क्यों किया जाना चाहिए ... –

+0

आईई 8 बाहर आने के बाद से मुझे इस मुद्दे से हल किया गया है। यह मेरे लिए एक अद्भुत खोज है। टिम - मैं तुमसे प्यार करता हूँ। – jerebear

+0

टिम – SW4

3

में एक समाधान 4 दिन बाद ...

ओपन पा सकते हैं। यदि आप सुनिश्चित हैं कि उपयोगकर्ता इस पर फ़ोकस करने से पहले आईफ़्रेम की सामग्री नहीं बदलेगा, तो आप वर्तमान में चयनित 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; 
} 
} 
+1

यह कैसे कम किया गया है ?? न केवल यह सवाल पूरी तरह से जवाब देता है, यह काफी शामिल उत्तर है जिसने लिखने के लिए कुछ प्रयास किए। –

+0

हाय टिम - यहां आपके प्रयास के लिए धन्यवाद - मैंने प्रदान किया गया डेमो केवल चयन के नुकसान को इंगित करना था - वास्तविक कोड श्रेणी को संग्रहीत और संसाधित करता है - हालांकि, मैं यह निर्धारित करना चाहता हूं कि यह एक बग या मूल व्यवहार है यानी 8 ।यदि यह कोई बग नहीं है - तो बीमार आपके कोड का उपयोग करें (लेकिन चयन को बनाए रखने के लिए यह अतिरिक्त अतिरिक्त ओवरहेड है) - मैं बस संपादन को प्रतिबंधित कर सकता हूं। यानी –

+0

मैं प्रदान करता हूं डेमो crescentfresh प्रदान करता हूँ। Mabe वहाँ एक समाधान है - उन बटन चयन को मार नहीं है - मेरे खोज पर बीमार अपडेट ... –

0

मेरे Editbox छवियों, टेबल आदि जहां पिछले iframe में क्लिक किया और IE6, IE7 और एफएफ के लिए काम करता जोड़ सकते हैं लेकिन IE8 के लिए यह शुरू में तो कहते हैं। तब उन्हें काटकर चिपकाया जा सकता है जहां आप उन्हें चाहते हैं लेकिन यह एक उपद्रव है। अधिक गंभीर यह है कि जब मैं किसी तालिका कक्ष के गुणों को बदलना चाहता हूं, उदाहरण के लिए, मुझे अब सेल में कुछ टेक्स्ट होना चाहिए जो मुझे हाइलाइट करना चाहिए या मैं यह निर्धारित नहीं कर सकता कि मैं किस तत्व में हूं!

क्या माइक्रोसॉफ्ट को चयन विधि के लिए कोई बग फिक्स है या फ़ायरफ़ॉक्स या पुराने संस्करण यानी एकमात्र कोर्स है?

माइक डब्ल्यू

+0

पर कितना अच्छा लगता है, आप इसे एक प्रश्न के रूप में पूछना चाहेंगे। –

संबंधित मुद्दे