2009-09-24 24 views
17
<html> 
<body> 
    <script type="text/javascript"> 

    function smth() { 

    if (document.getSelection) { 
    var str = document.getSelection(); 
    if (window.RegExp) { 
     var regstr = unescape("%20%20%20%20%20"); 
     var regexp = new RegExp(regstr, "g"); 
     str = str.replace(regexp, ""); 
    } 
    } else if (document.selection && document.selection.createRange) { 
    var range = document.selection.createRange(); 
    var str = range.text; 
    } 

    alert(str); 
    } 
    </script> 

    <iframe id="my" width="300" height="225"> 
    .....some html .... 
    </iframe>  

    <a href="#" onclick="smth();">AA</a> 
</body>  
</html> 

smth फ़ंक्शन के साथ मैं कुछ div से चयनित टेक्स्ट प्राप्त कर सकता हूं, लेकिन यह iframe के साथ काम नहीं करता है। किसी भी विचार को iframe से चयनित पाठ कैसे प्राप्त करें?जावास्क्रिप्ट के साथ iframe से चयनित पाठ कैसे प्राप्त करें?

उत्तर

6

आप iframe के अंदर डेटा तक पहुंच नहीं सकते हैं जो आपके डोमेन से अलग है। यह Same origin policy के कारण है।

+2

ठीक है, खेद गलत उदाहरण के लिए, iframe में मैं पाठ है, मैं wysiwig संपादक के लिए iframe उपयोग करते हैं, तो यह अलग डोमेन पर नहीं है। –

+0

जानकारी के लिए धन्यवाद। –

6

आपको आईफ्रेम में दस्तावेज़/विंडो से चयन प्राप्त करने की आवश्यकता है।

function getIframeSelectionText(iframe) { 
    var win = iframe.contentWindow; 
    var doc = win.document; 

    if (win.getSelection) { 
    return win.getSelection().toString(); 
    } else if (doc.selection && doc.selection.createRange) { 
    return doc.selection.createRange().text; 
    } 
} 

var iframe = document.getElementById("my"); 
alert(getIframeSelectionText(iframe)); 
17

document.getSelection

बाहरी दस्तावेज़ पर है। दस्तावेज़ के चयन प्राप्त करने के लिए iframe में आप आंतरिक दस्तावेज हड़पने के लिए की जरूरत है:

var iframe= document.getElementById('my'); 
var idoc= iframe.contentDocument || iframe.contentWindow.document; // ie compatibility 

idoc.getSelection() 

नोट तथापि वेबकिट document.getSelection()याdocument.selection समर्थन नहीं करता।

var idoc= iframe.contentDocument || iframe.contentWindow.document; 
var iwin= iframe.contentWindow || iframe.contentDocument.defaultView; 

''+iwin.getSelection() 

मुझे यकीन है कि क्या इस की बात है नहीं कर रहा हूँ: window.getSelection() जो दोनों फ़ायरफ़ॉक्स और वेबकिट में काम करता है, लेकिन रिटर्न एक चयन वस्तु (एक संग्रह/आवरण रेंज के आसपास) है, जो stringing की जरूरत है और इसकी जगह का प्रयास करें:

if (window.RegExp) { 
    var regstr = unescape("%20%20%20%20%20"); 
    var regexp = new RegExp(regstr, "g"); 
    str = str.replace(regexp, ""); 
} 

RegExp मूल जावास्क्रिप्ट को सबसे शुरुआती संस्करण में वापस डेटिंग करना है; यह हमेशा वहां रहेगा, आपको इसके लिए स्नीफ नहीं करना है। एकाधिक रिक्त स्थान का URL-एन्कोडिंग काफी अनावश्यक है। तुम भी इस तरह के रूप RegExp जरूरत नहीं है, एक तार की जगह लिखा जा सकता है के रूप में:

str= str.split('  ').join(''); 
+0

window.get चयन() एक चयन वस्तु देता है, न कि रेंज। चयन पर ToString हालांकि आपको चयन पाठ देगा। –

+0

हां, '' '+' टूस्ट्रिंग के लिए एक मुहावरे है। – bobince

+0

हाँ, मुझे पता है। मैं window.getSelection() से रेंज के रूप में लौटाई गई चयन ऑब्जेक्ट का जिक्र करते हुए एक मामूली त्रुटि को सही कर रहा था लेकिन आपके साथ सहमत हूं कि आपका कोड काम करेगा। –

2

के बाद कोड चयनित पाठ वापस आ जाएगी।

function getSelectedText(frameId) { 
    // In ExtJS use: 
    // var frame = Ext.getDom(frameId); 
    var frame = document.getElementById(frameId); 

    var frameWindow = frame && frame.contentWindow; 
    var frameDocument = frameWindow && frameWindow.document; 

    if (frameDocument) { 
     if (frameDocument.getSelection) { 
      // Most browsers 
      return String(frameDocument.getSelection()); 
     } 
     else if (frameDocument.selection) { 
      // Internet Explorer 8 and below 
      return frameDocument.selection.createRange().text; 
     } 
     else if (frameWindow.getSelection) { 
      // Safari 3 
      return String(frameWindow.getSelection()); 
     } 
    } 

    /* Fall-through. This could happen if this function is called 
     on a frame that doesn't exist or that isn't ready yet. */ 
    return ''; 
} 

आशा है कि इससे किसी की मदद मिलेगी।

+0

कंसोल में फ़ायरफ़ॉक्स में देख रहा था: त्रुटि: अनुमति 'संपत्ति' दस्तावेज़ तक पहुंचने से इनकार कर दिया गया। "यह लाइन में है जहां है:" var frameDocument = [... ] "। – Piotrek

1

इस कोड को सभी आधुनिक ब्राउज़रों में काम करता है:

var iframe = document.getElementById('my'); 
var idoc = iframe.contentDocument || iframe.contentWindow.document; // ie compatibility 
var text = idoc.getSelection().toString(); 
संबंधित मुद्दे