2011-11-03 21 views
29

मैं इस संदेश को फ़ायरफ़ॉक्स में कैसे ठीक कर सकता हूं? मैं एक इफ्रेम का उपयोग कर रहा हूं जिसमें एंकर टैग है? मैं इस लंगर के लिए एक संदर्भ प्राप्त करना चाहते हैं, लेकिन मैं इस त्रुटि जब मैं पहुँच लंगर के लिए कोशिश कर रहा हूँ हो रही है: किसी अन्य डोमेन परत्रुटि: अनुमति 'दस्तावेज़' तक पहुंचने से इनकार कर दिया गया

var frameWindow = document.getElementById('myIframe').contentWindow; 
var anchor = frameWindow.document.links[0]; //.getElementsByClassName('a'); 
anchor.onclick.... 
+2

आप ऐसा नहीं कर सकते हैं कि अगर अन्य डोमेन के लिए फ्रेम अंक। –

+0

लगता है कि iframe मूल पृष्ठ के समान डोमेन से नहीं है। आप तब सामग्री तक नहीं पहुंच सकते हैं। –

+2

यदि आप किसी अन्य डोमेन पर हैं तो आप विकास के लिए फ़ायरबग सीडी कमांड का उपयोग कर सकते हैं: https://groups.google.com/forum/?fromgroups=#!topic/firebug/DvUvoLw-hOI (http://getfirebug.com/wiki/ index.php/Command_Line_API # cd.28window.29) – baptx

उत्तर

10

आइफ्रेम अंक हैं, तो आप इस त्रुटि मिल जाएगा। यह क्रॉस-साइट स्क्रिप्टिंग रोकने आपके ब्राउज़र का एक उदाहरण है: http://en.wikipedia.org/wiki/Cross-site_scripting

+28

यह ठीक और बेवकूफ है, लेकिन ओपी जानना चाहता है कि इसके आसपास कैसे जाना है। – Noz

+5

@TarynEast Baptx की टिप्पणी एक बेहतर जवाब है कि कम से कम यह एक समाधान प्रदान करने का प्रयास करता है। हालांकि मैं easyXDM की तरह कुछ सुझाव भी दे सकता हूं। – Noz

22

Relaxing the same-origin policy

कुछ परिस्थितियों में एक ही मूल नीति भी प्रतिबंधक, बड़े वेबसाइटों है कि अधिक उप डोमेन का उपयोग के लिए समस्याएं खड़ी है। यहाँ यह आराम करने के लिए चार तकनीकें हैं:

document.domain property

तो दो खिड़कियां (या फ्रेम) स्क्रिप्ट है कि एक ही मूल्य के लिए डोमेन निर्धारित होते हैं, एक ही मूल नीति इन दो खिड़कियों के लिए आराम है, और प्रत्येक खिड़की कर सकते हैं दूसरे के साथ बातचीत करें। उदाहरण के लिए, order.example.com और catalog.example.com से लोड किए गए दस्तावेज़ों में स्क्रिप्ट को सहयोग करने से उनके दस्तावेज़.डोमेन गुण "example.com" पर सेट हो सकते हैं, जिससे दस्तावेजों को एक ही उत्पत्ति दिखाई दे और प्रत्येक दस्तावेज़ को पढ़ने में सक्षम बनाया जा सके। दूसरे के गुण। यह हमेशा काम नहीं कर सकता क्योंकि आंतरिक प्रतिनिधित्व में संग्रहीत पोर्ट को शून्य के रूप में चिह्नित किया जा सकता है। दूसरे शब्दों में example.com पोर्ट 80 example.com पोर्ट नल बन जाएगा क्योंकि हम document.domain अपडेट करते हैं। पोर्ट नल को 80 के रूप में नहीं माना जा सकता है (आपके ब्राउज़र के आधार पर) और इसलिए आपके ब्राउज़र के आधार पर विफल या सफल हो सकता है।

Cross-Origin Resource Sharing

एक ही मूल नीति में ढील के लिए दूसरी तकनीक नाम पार ओरिजिन रिसोर्स शेयरिंग के तहत मानकीकृत किया जा रहा है। यह ड्राफ्ट मानक HTTP को एक नए मूल अनुरोध शीर्षलेख और एक नया Access-Control-Allow-Origin प्रतिक्रिया शीर्षलेख के साथ बढ़ाता है। यह सर्वर को मूल रूप से उन सूचीओं को सूचीबद्ध करने के लिए हेडर का उपयोग करने की अनुमति देता है जो फ़ाइल का अनुरोध कर सकते हैं या वाइल्डकार्ड का उपयोग कर सकते हैं और किसी भी साइट द्वारा फ़ाइल से अनुरोध करने की अनुमति दे सकते हैं। फ़ायरफ़ॉक्स 3.5 और सफारी 4 जैसे ब्राउज़र इस नए शीर्षलेख का उपयोग XMLHttpRequest के साथ क्रॉस-मूल HTTP अनुरोधों को अनुमति देने के लिए करते हैं जो अन्यथा समान मूल नीति द्वारा प्रतिबंधित किए जाते हैं। [7]

Cross-document messaging

एक और नई तकनीक, पार दस्तावेज़ मैसेजिंग स्क्रिप्ट मूल की परवाह किए बिना एक और पृष्ठ पर एक स्क्रिप्ट के लिए शाब्दिक संदेशों पारित करने के लिए एक पृष्ठ से एक स्क्रिप्ट अनुमति देता है। विंडो ऑब्जेक्ट पर postMessage() विधि को कॉल करना अतुल्यकालिक रूप से उस विंडो में "onmessage" ईवेंट को सक्रिय करता है, जो किसी भी उपयोगकर्ता द्वारा परिभाषित ईवेंट हैंडलर को ट्रिगर करता है। एक पृष्ठ में एक स्क्रिप्ट अभी भी दूसरे पृष्ठ में विधियों या चरों तक सीधे नहीं पहुंच पाती है, लेकिन वे इस संदेश-पासिंग तकनीक के माध्यम से सुरक्षित रूप से संवाद कर सकते हैं।

JSONP

JSONP पेज जो किसी दूसरे डोमेन से एक JSON प्रतिक्रिया को लोड करता है करने के लिए एक <script> तत्व जोड़कर एक अलग डोमेन से JSON डेटा प्राप्त करने के लिए एक पेज की अनुमति देता है।

फ़ंक्शन कॉल JSONP का "पी" है- शुद्ध JSON के आसपास "पैडिंग" या some "उपसर्ग" के अनुसार। सम्मेलन के अनुसार, ब्राउज़र कॉलबैक फ़ंक्शन का नाम नामित क्वेरी पैरामीटर मान के रूप में प्रदान करता है, आमतौर पर नाम जेएसएसपी या कॉलबैक नामित क्वेरी पैरामीटर फ़ील्ड नाम के रूप में, सर्वर के अनुरोध में, उदाहरण के लिए,

<script type="application/javascript" 
     src="http://server2.example.com/Users/1234?jsonp=parseResponse"> 
</script> 

इस उदाहरण में, प्राप्त पेलोड होगा:

parseResponse({"Name": "Foo", "Id": 1234, "Rank": 7}); 
संबंधित मुद्दे