दिलचस्प पोस्ट
पदावनत: mysql_connect () जावा में एएससीआईआई में स्ट्रिंग का हेक्स परिवर्तित करें गिथूब को प्रतिबद्ध करने पर गिट विफल हो जाता है एक PHP वस्तु संपत्ति प्राप्त करें जो एक संख्या है यूनिकोड, यूटीएफ, एएससीआईआई, एएनएसआई प्रारूप मतभेद जांचें कि क्या स्ट्रिंग अजगर में एक आईपी एड्रेस पैटर्न से मेल खाता है? डेलिमिटर अल्फ़ान्यूमेरिक या बैकस्लाश और प्रीग_मैच नहीं होना चाहिए डब्ल्यूपीएफ माउस के नीचे एलीमेंट (ओं) को प्राप्त करें कैसे स्थानीय और वैश्विक चर डिफ़ॉल्ट रूप से आरंभ किए जाते हैं? UUID कितना अनूठा है? किसी भी लम्बाई के अनुरोधों को अनुमति देने के लिए web.config को कॉन्फ़िगर कैसे करें I क्या होता है अगर मैं कलम ऑब्जेक्ट पर डिस्पोज़ नहीं करता हूं? उपकरण आवंटन उपयोगकर्ता परिभाषित वर्गों के ऑब्जेक्ट और डेलोक को ट्रैक करते हैं प्रोटोटाइप पर सेटर / गेटर को कैसे परिभाषित करें एंड्रॉइड, पता लगाएँ कि जब अन्य एप्लिकेशन लॉन्च होते हैं

आईफ्रेम से एक मूल विंडो फ़ंक्शन कॉल करना

मैं एक आईफ्रेम से एक पेरेंट विंडो जावास्क्रिप्ट फ़ंक्शन को कॉल करना चाहता हूं।

<script> function abc() { alert("sss"); } </script> <iframe id="myFrame"> <a onclick="abc();" href="#">Call Me</a> </iframe> 

वेब के समाधान से एकत्रित समाधान "आईफ्रेम से एक मूल विंडो फ़ंक्शन कॉल करना"

 <a onclick="parent.abc();" href="#" >Call Me </a> 

खिड़की देखें

वर्तमान विंडो या उप-फ़्रेम के अभिभावक के लिए एक संदर्भ देता है

अगर किसी विंडो में कोई अभिभावक नहीं होता है, तो उसकी मूल संपत्ति एक संदर्भ है।

जब एक खिड़की <iframe> , <object> , या <frame> में लोड होती है, तो उसकी मूल विंडो खिड़की को एम्बेड करने के तत्व के साथ होती है।

मुझे हाल ही में यह पता लगाना पड़ा कि ऐसा क्यों नहीं हुआ।

जावास्क्रिप्ट जो आप बच्चे से कॉल करना चाहते हैं IFrame को माता-पिता के मुखिया होने की जरूरत है I अगर यह शरीर में है, तो स्क्रिप्ट वैश्विक दायरे में उपलब्ध नहीं है।

 <head> <script> function abc() { alert("sss"); } </script> </head> <body> <iframe id="myFrame"> <a onclick="parent.abc();" href="#">Click Me</a> </iframe> </body> 

उम्मीद है कि इस मुद्दे पर फिर से किसी को ठोकर उठाने वाले किसी को मदद मिलती है।

मैंने इसे एक अलग जवाब के रूप में पोस्ट किया है क्योंकि यह मेरे मौजूदा उत्तर से संबंधित नहीं है।

यह समस्या हाल ही में एक आईफ़्रेम से एक उपडोमेन को संदर्भित करने के लिए एक अभिभावक को एक्सेस करने के लिए फिर से उत्पन्न हुई और मौजूदा सुधार कार्य नहीं करते थे

इस बार उत्तर में मूल पृष्ठ के दस्तावेज़.डोमेन को संशोधित करना था और आईफ़्रेम समान होना था। यह वही मूल नीति को बेवकूफ़ बना देगा जो वे उसी डोमेन पर सह-अस्तित्व को सोचने की जांच कर सकते हैं (उप डोमेन एक अलग मेजबान माना जाता है और एक ही मूल नीति जांच में विफल होता है)।

मूल डोमेन से मेल करने के लिए iframe में पृष्ठ के <head> पर निम्न डालें (अपने doctype के लिए समायोजित करें)।

 <script> document.domain = "mydomain.com"; </script> 

कृपया ध्यान दें कि यह स्थानीयहोस्ट विकास पर एक त्रुटि फेंक देगा, इसलिए त्रुटि से बचने के लिए निम्न की तरह एक चेक का उपयोग करें:

 if (!window.location.href.match(/localhost/gi)) { document.domain = "mydomain.com"; } 

Window.postMessage ()

यह विधि cross-origin संचार को सुरक्षित रूप से सक्षम बनाता है।

और अगर आपके पास पेरेंट पेज कोड तक पहुंच है, तो किसी भी मूल विधि के साथ ही किसी भी डेटा को सीधे Iframe से पास किया जा सकता है। यहां एक छोटा सा उदाहरण है:

अभिभावक पृष्ठ:

 if (window.addEventListener) { window.addEventListener("message", onMessage, false); } else if (window.attachEvent) { window.attachEvent("onmessage", onMessage, false); } function onMessage(event) { // Check sender origin to be trusted if (event.origin !== "http://example.com") return; var data = event.data; if (typeof(window[data.func]) == "function") { window[data.func].call(null, data.message); } } // Function to be called from iframe function parentFunc(message) { alert(message); } 

आइफ्रेम कोड:

 window.parent.postMessage({ 'func': 'parentFunc', 'message': 'Message text from iframe.' }, "*"); 

संदर्भ:

  • क्रॉस-दस्तावेज़ मैसेजिंग
  • Window.postMessage ()
  • क्या में उपयोग कर सकता हूँ

आप उपयोग कर सकते हैं

 window.top 

निम्नलिखित देखें

 <head> <script> function abc() { alert("sss"); } </script> </head> <body> <iframe id="myFrame"> <a onclick="window.top.abc();" href="#">Click Me</a> </iframe> </body> 

उन लोगों के लिए एक और जो इसके लिए आवश्यकता है एश क्लार्क का समाधान काम नहीं करता है यदि वे अलग-अलग प्रोटोकॉल का उपयोग कर रहे हैं तो सुनिश्चित करें कि यदि आप एसएसएल का उपयोग कर रहे हैं, तो आपका आईफ्रेम एसएसएल का उपयोग कर रहा है या यह फ़ंक्शन को तोड़ देगा। उसके समाधान ने खुद डोमेन के लिए काम किया, हालांकि, इसके लिए धन्यवाद

उप क्लास के लिए ऐश क्लार्क द्वारा दिए गए समाधान महान काम करता है, लेकिन कृपया ध्यान दें कि आपको दस्तावेज़ को शामिल करना होगा। डोमेन = "mydomain.com"; iframe पृष्ठ के दोनों प्रमुख और माता-पिता के पृष्ठ के सिर में, जैसा कि एक ही मूल नीति चेक में बताया गया है

जावास्क्रिप्ट डीओएम पहुंच के लिए लागू की गई समान मूल नीति के लिए एक महत्वपूर्ण विस्तार (लेकिन मूलभूत जांच के अन्य अधिकांश स्वादों के लिए नहीं) यह है कि एक समान शीर्ष-स्तरीय डोमेन साझा करने वाली दो साइट "समान मेजबान" को विफल होने के बावजूद संवाद करने का विकल्प चुन सकते हैं पारस्परिक रूप से उनके संबंधित दस्तावेज़ को निर्धारित करके जांचें। डोमैन डोम संपत्ति को उनके मौजूदा होस्ट नाम के एक ही योग्य, दायां हाथ के टुकड़े के लिए। उदाहरण के लिए, यदि http://en.example.com/ और http://fr.example.com/ दोनों "example.com" के लिए document.domain सेट करते हैं, तो वे उस बिंदु से होकर समान मूल माना जाएगा डोम हेरफेर का उद्देश्य

parent.abc () सुरक्षा उद्देश्यों के कारण ही एक ही डोमेन पर काम करेगा मैंने इस समाधान की कोशिश की और मेरा काम पूरी तरह से किया गया।

 <head> <script> function abc() { alert("sss"); } // window of the iframe var innerWindow = document.getElementById('myFrame').contentWindow; innerWindow.abc= abc; </script> </head> <body> <iframe id="myFrame"> <a onclick="abc();" href="#">Click Me</a> </iframe> </body> 

उम्मीद है की यह मदद करेगा। 🙂

फ़ायरफ़ॉक्स और क्रोम के साथ आप इसका उपयोग कर सकते हैं:

 <a href="whatever" target="_parent" onclick="myfunction()"> 

यदि आइफ्रेम दोनों में आइफ्रेम और माता-पिता में मौजूद है, तो माता-पिता को बुलाया जाएगा।

हालांकि इनमें से कुछ समाधान काम कर सकते हैं, उनमें से कोई भी सर्वोत्तम प्रथाओं का पालन नहीं करता है कई वैश्विक वैरिएबल असाइन करते हैं और आप खुद को कई पैतृक चर या फ़ंक्शंस पर कॉल कर सकते हैं, जिससे एक बरबाद, कमजोर नाम स्थान हो सकते हैं।

इससे बचने के लिए, एक मॉड्यूल पैटर्न का उपयोग करें मूल विंडो में:

 var myThing = { var i = 0; myFunction : function () { // do something } }; var newThing = Object.create(myThing); 

फिर, iframe में:

 function myIframeFunction () { parent.myThing.myFunction(); alert(parent.myThing.i); }; 

यह क्रॉकफोर्ड के मूल पाठ के विरासत अध्याय में वर्णित पैटर्न के समान है, "जावास्क्रिप्ट: द गुड पार्ट्स।" आप जावास्क्रिप्ट के सर्वोत्तम तरीकों के लिए w3 के पृष्ठ पर और भी अधिक जान सकते हैं https://www.w3.org/wiki/JavaScript_best_practices#Avoid_globals