2010-08-28 17 views
6

का संदर्भ प्राप्त करना कहें कि मेरे पास एक दस्तावेज़ ऑब्जेक्ट का संदर्भ है, जो IFRAME के ​​अंदर निहित है। मैं कंटेनर IFRAME का संदर्भ कैसे प्राप्त करूं? .parentNode और .ownerDocument दोनों वापसी शून्य।अभिभावक IFRAME

कृपया ध्यान दें कि कोई संदर्भ जानकारी उपलब्ध नहीं है (उदाहरण के लिए 'window.xxx' जैसे समाधान काम नहीं करेंगे) - जो कुछ उपलब्ध है वह दस्तावेज़ ऑब्जेक्ट का संदर्भ है।

धन्यवाद

+0

क्या आप "एक दस्तावेज़ वस्तु के संदर्भ में" द्वारा मतलब है? कंटेनर IFRAME कौन सा है? कृपया स्पष्टीकरण दें और शायद कुछ कोड –

+0

दिखाएं मेरे पास एक HTMLDocument स्क्रिप्टिंग ऑब्जेक्ट (फ़ायरफ़ॉक्स स्क्रिप्टिंग पर्यावरण में) का संदर्भ है, और इसके कंटेनर IFrame का कोई संदर्भ नहीं है। – Melllvar

उत्तर

11

एक दस्तावेज़ सीधे अपने मूल दस्तावेज़ से कनेक्ट नहीं है। parent लेने के लिए आपको window के संदर्भ की आवश्यकता है।

डीओएम स्तर 2 दृश्य संपत्ति document.defaultView आपको अधिकांश आधुनिक वेब ब्राउज़र में window देगा, लेकिन आईई में आपको गैर-मानक document.parentWindow इसके बजाय उपयोग करना होगा। (कुछ पुराने या अधिक अस्पष्ट ब्राउज़र इन गुणों में से किसी एक को लागू नहीं करते हैं, इस मामले में आप अटक गए हैं।)

जो आपको मूल दस्तावेज़ के window देगा। यदि आप प्राप्त करना चाहते हैं जो आपके दस्तावेज़ को रखता है, तो आपको पृष्ठ पर सभी iframes के माध्यम से पुन: प्रयास करना होगा और जांचें कि निहित दस्तावेज़ स्वयं है या नहीं।

फिर, विधि वापस बच्चे के लिए एक iframe तत्व से प्राप्त करने के लिए (iframe.contentWindow आप window दे रही है) बनाम डोम मानक और बाकी सब (iframe.contentDocument आप document दे रही है) IE में अनावश्यक रूप से अलग है।

तो, कुछ की तरह: (। try... जब एक दस्तावेज पहुँच विफल रहता है पाश बाहर दुर्घटनाग्रस्त होने से बचने के लिए एक और iframe एक अलग डोमेन पर जा रहा है, एक ही मूल नीति त्रुटि पैदा की वजह से है)

function getFrameForDocument(document) { 
    var w= document.defaultView || document.parentWindow; 
    var frames= w.parent.document.getElementsByTagName('iframe'); 
    for (var i= frames.length; i-->0;) { 
     var frame= frames[i]; 
     try { 
      var d= frame.contentDocument || frame.contentWindow.document; 
      if (d===document) 
       return frame; 
     } catch(e) {} 
    } 
} 

+0

बिल्कुल सही जवाब; धन्यवाद! – Melllvar

+0

सामान्य रूप से अच्छा काम। –

1

मैं इस का उपयोग करें:

function get_container_iframe() 
     {var rtn_iframe=null; 
      var iframes=window.parent.document.getElementsByTagName('iframe'); 
      for (var i=0; i<iframes.length; ++i) 
       {try 
        {var d=iframes[i].contentDocument || iframes[i].contentWindow.document || iframes[i].document; //ie | firefox etc | ie5 
        if (d===window.document) 
         {rtn_iframe=iframes[i]; 
         break; 
         } 
        } 
       catch(e) {} 
       } 
      return rtn_iframe; 
     }