2010-08-03 30 views
6

में execCommand ("insertHTML", ...) document.execCommand() का उपयोग कर एक संपादन योग्य आईफ्रेम के साथ एक wysiwyg-editor बना रहा हूं।इंटरनेट एक्सप्लोरर

function run() { 
 
    document.getElementById("target").focus(); 
 
    document.execCommand("insertHTML", false, "<b>ins</b>"); 
 
}
<div contenteditable id="target">contenteditable</div> 
 
<button onclick="run()">contenteditable.focus() + document.execCommand("insertHTML", false, "&lt;b>ins&lt;/b>")</button>

इस समस्या का मानक समाधान क्या है: अब मैं "insertHTML" आदेश जो क्रोम और फ़ायरफ़ॉक्स में पूरी तरह से काम करता है लेकिन निश्चित रूप से यह इंटरनेट एक्सप्लोरर में काम नहीं करता है उपयोग करने की आवश्यकता? यह ठीक है अगर यह केवल IE8 में काम करता है लेकिन आईई 7-समर्थन भी अच्छा होगा। ,

var doc = document.getElementById("your_iframe").contentWindow.document; 

if (doc.selection && doc.selection.createRange) { 
    var range = doc.selection.createRange(); 
    if (range.pasteHTML) { 
     range.pasteHTML("<b>Some bold text</b>"); 
    } 
} 

अद्यतन

IE 11 में, document.selection चला गया है और insertHTML अभी भी समर्थित नहीं है:

+0

[इन] (https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/7536602/) [बग रिपोर्ट] (https://github.com/yabwe/ मध्यम संपादक/मुद्दों/771 # मुद्दा-1822330 9 0) का अर्थ है कि एज execCommand ("insertHTML", ..) का समर्थन करता है (हालांकि अपने स्वयं के quirks के साथ)। – Nickolay

उत्तर

14

आईई < में = 10 आप चयन का प्रतिनिधित्व TextRange की pasteHTML विधि का उपयोग कर सकते हैं तो आपको निम्न की तरह कुछ चाहिए:

https://stackoverflow.com/a/6691294/96100

+0

आईई पृष्ठ के शीर्ष पर पाठ जोड़ रहा है। कोई विचार क्यों यह var doc द्वारा निर्दिष्ट आईफ्रेम में नहीं रखा जा रहा है? – tundoopani

+0

@ टंडूओपानी: अधिक संदर्भ के बिना नहीं। क्या आपके पास एक उदाहरण पृष्ठ है? –

+0

मैंने यहां एक साधारण संस्करण कोड किया: http://jsfiddle.net/MWz7A/3/। आईई 9 में, सामग्री आईफ्रेम संपादक में नहीं रखी गई है। – tundoopani

3

मामले में आप कुछ भी अभी तक नहीं मिला है,

मैं एक बटन है कि एक iframe में एचटीएमएल जोड़ना होगा था, और IE8 में एक त्रुटि पैदा कर रहा था जब मैं बटन क्लिक किया और कोई पाठ का चयन किया गया है (यानी जब मुझे झपकी देखभाल थी)। यह पता चला कि बटन स्वयं ही चयन कर रहा था (अचयनित करने के बावजूद = "चालू"), और त्रुटि को फेंकने के लिए जावास्क्रिप्ट का कारण बनता है। जब मैंने बटन को एक div में बदल दिया (अचयनित के साथ) यह ठीक काम करता है, आईई 8 और एफएफ में।

उम्मीद है कि इससे मदद मिलती है।

1
var doc = document.getElementById("your_iframe").contentWindow.document; 

// IE <= 10 
if (document.selection){ 
    var range = doc.selection.createRange(); 
     range.pasteHTML("<b>Some bold text</b>"); 

// IE 11 && Firefox, Opera ..... 
}else if(document.getSelection){ 
    var range = doc.getSelection().getRangeAt(0); 
    var nnode = doc.createElement("b"); 
     range.surroundContents(nnode); 
     nnode.innerHTML = "Some bold text"; 
}; 
+0

विधि 'पेस्ट HTML' 'IE' – Dinei

+0

में 'रेंज' ऑब्जेक्ट पर मौजूद नहीं है, उसी समस्या वाले लोगों के लिए, [@ डेविड उत्तर] (http://stackoverflow.com/a/27642361/3136474) केवल एकमात्र है एक जो मेरे लिए काम किया। – Dinei

2

मैं जानता हूँ कि यह बेहद पुराना है, लेकिन जब से IE अभी भी एक समस्या है, यहाँ एक बेहतर तरीका जो भी execCommand का उपयोग नहीं करता है।

इसमें कुछ चेक गुम हैं, जैसे कि आप एक छवि जोड़ने के लिए सही कंटेनर में हैं।

var sel = window.getSelection(); 
var range = sel.getRangeAt(0); 
var frag = document.createDocumentFragment(); 
var img = document.createElement("img"); 
// add image properties here 

frag.appendChild(img); 
range.insertNode(frag); 
+1

यहां तक ​​कि यह मुद्दा पुराना है, यह उत्तर केवल एकमात्र है जो मेरे लिए काम करता है। अपना ज्ञान साझा करके धन्यवाद। – Dinei

+0

IE8 समर्थित नहीं – dexiang

+0

@dexiang आसान विकल्प IE8 और नीचे की परवाह नहीं है। :) – David

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