2016-03-31 18 views
10

मेरे पास एक HTML दस्तावेज़ है जिसमें iframe है। जब भी मैं जेएस के साथ इस iframe को एक्सेस या संशोधित करने का प्रयास करता हूं तो मुझे Error: Permission denied to access property "document" मिलता है।त्रुटि: संपत्ति "दस्तावेज़" तक पहुंचने से इनकार कर दिया गया

मैं frame.contentWindow.document.body.innerHTML या frame.contentWindow.document.body.onload या iframe को एक्सेस या संशोधित करने के लिए ऐसे ही गुणों का उपयोग कर रहा हूं। (दिए गए कोड में iframe को frame के रूप में जाना जाता है।)

वेब-ऐप के लिए मैं विकास कर रहा हूं, इन विशेषताओं तक पहुंच आवश्यक है और मैं इन (या समान विकल्प) के बिना नहीं कर सकता। अन्य वेबसाइटों की iframe रों में

उत्तर

11

तक पहुंचना और फिर संशोधित वेबपेजों Cross-site scripting या के रूप में जाना जाता है XSS और यह दुर्भावनापूर्ण हैकर द्वारा इस्तेमाल किया असंदेहास्पद पीड़ितों पर शिकार करने के लिए एक तकनीक है।

ब्राउज़र निर्माताओं द्वारा इस तरह के व्यवहार और जेएस कोड के मनमाने ढंग से निष्पादन को रोकने के लिए "समान-मूल नीति" के नाम से एक नीति लागू की गई है।

यह त्रुटि उसी दस्तावेज़ और उप डोमेन में iframe में मूल दस्तावेज़ और दस्तावेज़ को होस्ट करके रोक दी जा सकती है, और यह सुनिश्चित कर लें कि दस्तावेज़ उसी प्रोटोकॉल का उपयोग करके लोड हो जाएं।

असंगत पेज के उदाहरण:

  1. http://www.example.org & http://www.example2.com
  2. http://abc.example.org & http://xyz.example.com
  3. http://www.example.org & https://www.example.com

Cross-Origin Resource Sharing इस समस्या का समाधान है।

उदाहरण के लिए:

Access-Control-Allow-Origin: http://www.example.org 

HTML के साथ भेजने के लिए सिर्फ एक में रख:
तो http://www.example.comhttp://www.example.org साथ http://www.example.com/hello साझा करना चाहते हैं, एक हैडर दस्तावेज है जो ऐसा दिखाई देता है के साथ भेजा जा सकता है <META HTTP-EQUIV="..."> टैग, इस तरह:

<head> 
    ... 
    <META HTTP-EQUIV="Access-Control-Allow-Origin" CONTENT="http://www.example.org"> 
    ... 
</head> 
+0

यदि मेरे पास पृष्ठ के "सिर" भाग तक पहुंच नहीं है तो क्या होगा? मैं स्क्वायरस्पेस में विजेट एम्बेड करने की कोशिश कर रहा हूं। –

+0

@PJBrunet दुर्भाग्यवश, आप भाग्य से बाहर हैं ...यदि आप विजेट के बारे में विवरण देते हैं और आप जो संशोधित करने का प्रयास कर रहे हैं, तो मैं आपकी मदद कर सकता हूं। – sbrm1

+1

मैं यहां चैट नहीं करना चाहूंगा, जो स्टैक ओवरफ्लो फहरा हुआ है। स्क्वायरस्पेस वास्तव में "हेड" तक पहुंच की इजाजत देता है हालांकि आपका समाधान मदद नहीं करता क्योंकि मैं दूसरे डोमेन पर हूं। मैंने एक घटना के बाद आईफ्रेम के यूआरएल को बदलने में मेरी समस्या को हल करने के लिए समाप्त कर दिया, और फिर नए आईफ्रेम यूआरएल में मेरे पैरामीटर जैसे ज़िप कोड = 12345 –

3

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

खिड़की 1 - प्राप्त

window.addEventListener("message", receiveMessage, false); 

function receiveMessage(event) 
{ 
    var origin = event.origin || event.originalEvent.origin; 
    // For Chrome, the origin property is in the event.originalEvent object. 
    if (origin !== "http://example.org:8080") 
    return; 

    // ... 
} 

विंडो - 2 संचरण

var popup = window.open(...popup details...); 
popup.postMessage(
     "The user is 'bob' and the password is 'secret'", 
     "https://secure.example.net" 
); 

आप पत्र-व्यवहार करना के लिए एक और जोड़ी बनानी होगी।

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

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