2012-11-06 24 views
5

असल में मैं एक आईफ्रेम चाहता हूं जो हमेशा इसकी सामग्री को प्रतिबंधित करता है जैसे कि यह किसी भिन्न डोमेन से आता है, भले ही सामग्री एक ही उत्पत्ति से आती है।बाहरी साइट के गुणों तक पहुंचने के लिए IFrame में जावास्क्रिप्ट को कैसे रोक सकता हूं, भले ही आईफ्रेम की सामग्री एक ही मूल से आती है?

क्या ऐसा करने का कोई तरीका है?

+0

आप [काजा] (http://code.google.com/p/google-caja/) या [AdSafe] (http://www.adsafe.org/) पर एक नज़र डालना चाहते हैं। वे "ग्लोबलकोड" के लिए एक रैपर प्रदान करते हैं ताकि उन्हें आपकी वैश्विक वस्तु के साथ गड़बड़ करने जैसी चीजों को करने से रोका जा सके। – Christoph

उत्तर

1

यह बच्चे फ्रेम/विंडो में window.parent छिपाएगा, लेकिन top संपत्ति नहीं।

लेकिन window.parent संपत्ति बच्चे विंडो/फ्रेम के अधिभार ईवेंट के अंत तक अभी तक पहुंच योग्य है।

<html> 
    <head> 
    <style type="text/css"> 
     #wrapper {width:1000px;height:600px;} 
    </style> 
    <script type="text/javascript"> 
     window.onload = function() { 
     var frm = document.getElementById('childFrame'); 
     var win = frm.contentWindow || (frm.contentDocument && frm.contentDocument.parentWindow) || (frm.document && frm.document.parentWindow); 
     if (win) win.parent = null; 
     } 
    </script> 
    </head> 
    <body> 
    <div id="wrapper"> 
     <iframe id="childFrame" src="child.html" frameborder="0" style="width:100%;height:100%;"></iframe> 
    </div> 
    </body> 
</html> 
+1

यह मेरे लिए बहुत सुरक्षित प्रतीत नहीं होता है। यदि बच्चे iframe में कहीं भी पैरेंट विंडो के लिए * किसी भी * संदर्भ संदर्भ हैं, तो वे बाहर निकल जाएंगे, और आपके पास केवल सुरक्षा का भ्रम होगा। – apenwarr

10

सबसे अच्छा समाधान iframe, जिसे (डिफ़ॉल्ट रूप से) स्पष्ट रूप से दोनों पटकथा और माता पिता के डोम के लिए एक ही मूल के पहुँच अक्षम पर एचटीएमएल 5 सैंडबॉक्स विशेषता का उपयोग करने शायद है।

http://msdn.microsoft.com/en-us/hh563496.aspx

पर अच्छा परिचय दिसंबर 2012 के रूप में, यह supported on most current browsers हो रहा है।