RoBorg सही है, लेकिन मैं एक साइड नोट जोड़ना चाहता था।
IE7 / IE8 में जब Microsoft ने अपने ब्राउज़र में टैब्स जोड़े तो उन्होंने एक ऐसी चीज़ को तोड़ा जो आपके जेएस के साथ कहर पैदा करेगा अगर आप सावधान नहीं हैं।
इस पृष्ठ लेआउट की कल्पना करें:
MainPage.html
IframedPage1.html (named "foo")
IframedPage2.html (named "bar")
IframedPage3.html (named "baz")
अब फ्रेम "बाज" में आप एक लिंक पर क्लिक करें (कोई लक्ष्य नहीं है, "बाज" फ्रेम में लोड होता है) यह ठीक काम करता है।
यदि जो पेज लोड हो जाता है, उसे विशेष कहते हैं। html यह जांचने के लिए JS का उपयोग करता है कि "यह" का कोई पेरेंट फ्रेम "बार" है या नहीं, यह सही (अपेक्षित) वापस आएगा।
अब यह कहता है कि विशेष html पृष्ठ जब यह लोड होता है, तो मूल फ्रेम (अस्तित्व और उसके नाम के लिए) की जांच करता है, और यदि यह "बार" है तो यह बार फ्रेम में खुद को फिर से लोड करता है।
if(window.parent && window.parent.name == 'bar'){
window.parent.location = self.location;
}
अब तक सब ठीक है। अब बग आता है।
सामान्य की तरह मूल लिंक पर क्लिक करने और "baz" फ्रेम में special.html पेज को लोड करने के बजाय कहते हैं, आपने इसे बीच में क्लिक किया या इसे नए टैब में खोलने के लिए चुना।
जब वह नया टैब लोड होता है ( बिना किसी पैरेंट फ्रेम के! ) IE पेज लोडिंग के अंतहीन लूप में प्रवेश करेगा! क्योंकि IE "जावास्क्रिप्ट पर फ्रेम संरचना" पर कॉपी करता है जैसे कि नया टैब एक माता-पिता है, और वह माता-पिता "बार" नाम है।
अच्छी खबर यह है कि जाँच:
if(self == top){
//this returns true!
}
उस नए टैब में यह सही है, और इस प्रकार आप इस विषम स्थिति के लिए परीक्षण कर सकते हैं।