2012-05-14 20 views
13

मैं एक बच्चे विंडो से माता-पिता में परिभाषित जावास्क्रिप्ट फ़ंक्शन को कॉल करने का प्रयास कर रहा हूं।जावास्क्रिप्ट विंडो.ऑनर कॉल पैरेंट फ़ंक्शन

जनक:

<html> 
<head> 
<title>Test</title> 
<script type="text/javascript"> 
function foo() { 
alert ("Hello from parent!"); 
} 
function doStuff() { 
var w = window.open("testa.html"); 
} 
</script> 
</head> 
<body> 
<input type="button" value="open" onClick="doStuff();" /> 
</body> 
</html> 

और बच्चे:

<html> 
<head> 
<title>Test A</title> 
<script type="text/javascript"> 
function get() { 
window.opener.foo(); 
} 
</script> 
</head> 
<body> 
<input type="button" value="Call Parent" onClick="get();" /> 
</body> 
</html> 

मैं नहीं, मेरे जीवन के लिए, कॉल कर सकते हैं बच्चे प्रक्रिया से समारोह foo मैं दो फ़ाइलों इस तरह की है। मैंने सोचा कि यह window.opener ऑब्जेक्ट के साथ संभव होना चाहिए, लेकिन मैं यह काम नहीं कर सकता। कोई सुझाव?

+4

क्या आप इन पृष्ठों को 'http: // 'या' फ़ाइल: /// 'पर एक्सेस कर रहे हैं? 'फ़ाइल' प्रोटोकॉल में कोई उत्पत्ति नहीं है, इसलिए आप हमेशा 'एसओपी] (http://en.wikipedia.org/wiki/Same_origin_policy) को विफल कर देंगे,' ओपनर 'को पहुंचने योग्य नहीं। –

+0

यह पता चला कि समस्या थी- मैं बस उन्हें फाइल पर एक्सेस कर रहा था: //। जब मैं उन्हें http: // निर्देशिका में फेंक देता हूं, तो यह ठीक काम करता है। – RPIBuckHunter

+0

http: // और फ़ाइल क्या है: ///? इसे एक से दूसरे में कैसे बदलें। मेरी भी यही समस्या है? कृपया मदद करे। –

उत्तर

16

सुनिश्चित करें कि आप इसे http: // के माध्यम से एक्सेस कर रहे हैं, इसलिए वही मूल नीति पास हो जाती है और आप बच्चे से सलामी बल्लेबाज तक पहुंच सकते हैं। अगर आप फाइल का उपयोग कर रहे हैं तो यह काम नहीं करेगा: //।

+0

के बजाय ब्राउज़र में' फ़ाइल: /// 'प्रोटोकॉल के साथ ब्राउज़र में खुल जाएगा, क्या यह https: // के लिए काम करेगा? – Muthu

1

राहुल के प्रश्न का उत्तर देना:

हर ब्राउज़र सर्वर से या स्थानीय फाइल सिस्टम से पृष्ठों को लोड कर सकते हैं। स्थानीय फाइल सिस्टम से फ़ाइल लोड करने के लिए आपको ब्राउज़र को इस file://[path] जैसे पते पर रखना चाहिए, जहां [पथ] फाइल सिस्टम में फ़ाइल का पूर्ण पथ है (विंडोज़ पर ड्राइव लेटर सहित, विवरण के लिए http://blogs.msdn.com/b/ie/archive/2006/12/06/file-uris-in-windows.aspx देखें)।

स्थानीय HTTP सर्वर से फ़ाइल लोड करने के लिए (यदि आपके पास कोई है) तो आपको इस http://localhost:[port]/[path] जैसे कुछ पता लगाना चाहिए, जहां [पोर्ट] वह पोर्ट है जहां आपका सर्वर चल रहा है (डिफ़ॉल्ट 80 है) और [पथ] है सर्वर के दस्तावेज़ रूट फ़ोल्डर से संबंधित फ़ाइल का पथ। दस्तावेज़ रूट फ़ोल्डर सर्वर विन्यास पर निर्भर करता है।

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

इस विशेष उदाहरण में ब्राउज़र सुरक्षा तंत्र को मूल जानकारी नहीं मिली और मूल विंडो तक पहुंचने से रोक रहा था।

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