मेरे पास प्रोजेक्ट है जिसमें मुझे जावास्क्रिप्ट का उपयोग करके <iframe> तत्व बनाना है और इसे DOM में जोड़ना है। उसके बाद, मुझे <iframe> में कुछ सामग्री डालने की आवश्यकता है। यह एक विजेट है जिसे तृतीय-पक्ष वेबसाइटों में एम्बेड किया जाएगा।
मैं <iframe> की "src" विशेषता सेट नहीं करता क्योंकि मैं एक पृष्ठ लोड नहीं करना चाहता; बल्कि, इसका उपयोग उस सामग्री को अलग करने / सैंडबॉक्स करने के लिए किया जाता है जिसे मैं इसमें सम्मिलित करता हूं ताकि मैं सीएसएस या जावास्क्रिप्ट में मूल पृष्ठ के साथ संघर्ष न करूं। मैं JSONP का उपयोग सर्वर से कुछ HTML सामग्री को लोड करने और इस <iframe> में डालने के लिए कर रहा हूँ।
मेरे पास यह काम ठीक है, एक गंभीर अपवाद के साथ - अगर document.domain संपत्ति मूल पृष्ठ में सेट है (जो कि यह कुछ वातावरण में हो सकता है जिसमें यह विजेट तैनात है), Internet Explorer (शायद सभी संस्करण, लेकिन मैंने 6, 7, और 8) में पुष्टि की गई है, जब मैंने इस <iframe> के दस्तावेज़ ऑब्जेक्ट तक पहुँचने का प्रयास किया, तो मुझे "एक्सेस से वंचित" त्रुटि मिली है। यह किसी भी अन्य ब्राउज़रों में नहीं हुआ है जिसे मैंने (सभी प्रमुख आधुनिक लोगों में) परीक्षण किया है।
यह कुछ समझ में आता है, क्योंकि मुझे पता है कि इंटरनेट एक्सप्लोरर को आपको सभी विंडोज़ / फ्रेम के डॉक्यूमेंट सेट करने की आवश्यकता होती है, जो एक-दूसरे के साथ समान मूल्य पर संवाद करेंगे। हालाँकि, मैं इस मूल्य को किसी दस्तावेज़ पर सेट करने के बारे में नहीं जानता, जिसे मैं एक्सेस नहीं कर सकता।
क्या किसी को ऐसा करने के तरीके के बारे में पता है - किसी भी तरह से इस गतिशील रूप से बनाए गए दस्तावेज़ के दस्तावेज़ सेट करें <iframe>? या मैं इसे सही कोण से नहीं देख रहा हूं - क्या इस समस्या को चलाने के बिना मैं जो हासिल करने जा रहा हूं उसे प्राप्त करने का एक और तरीका है? मुझे किसी भी मामले में <iframe> का उपयोग करने की आवश्यकता है, क्योंकि पृथक / सैंडबॉक्स वाली विंडो इस विजेट की कार्यक्षमता के लिए महत्वपूर्ण है।
यहाँ मेरा परीक्षण कोड है:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Document.domain Test</title>
<script type="text/javascript">
document.domain = 'onespot.com'; // set the page's document.domain
</script>
</head>
<body>
<p>This is a paragraph above the <iframe>.</p>
<div id="placeholder"></div>
<p>This is a paragraph below the <iframe>.</p>
<script type="text/javascript">
var iframe = document.createElement('iframe'), doc; // create <iframe> element
document.getElementById('placeholder').appendChild(iframe); // append <iframe> element to the placeholder element
setTimeout(function() { // set a timeout to give browsers a chance to recognize the <iframe>
doc = iframe.contentWindow || iframe.contentDocument; // get a handle on the <iframe> document
alert(doc);
if (doc.document) { // HEREIN LIES THE PROBLEM
doc = doc.document;
}
doc.body.innerHTML = '<h1>Hello!</h1>'; // add an element
}, 10);
</script>
</body>
</html>
मैंने इसे होस्ट किया है:
http://troy.onespot.com/static/access_denied.html
जैसा कि आप देखेंगे कि क्या आप IE में इस पृष्ठ को लोड करते हैं, इस बिंदु पर कि मैं अलर्ट कहता हूं (), मेरे पास <iframe> की विंडो ऑब्जेक्ट पर एक हैंडल है; मैं अभी इसके दस्तावेज़ ऑब्जेक्ट में कोई गहरा नहीं मिल सकता।
किसी भी मदद या सुझाव के लिए बहुत बहुत धन्यवाद! मैं इसके लिए एक समाधान खोजने में मेरी मदद करने के लिए ऋणी रहूंगा।