রবার্গ সঠিক, তবে আমি একটি পাশ নোট যুক্ত করতে চেয়েছিলাম।
আইই / / আইই 8-তে যখন মাইক্রোসফ্ট তাদের ব্রাউজারে ট্যাবগুলি যুক্ত করেছিল তারা এমন একটি জিনিস ভেঙে দিয়েছে যা আপনি যদি সাবধান না হন তবে আপনার জেএসের সাথে বিপর্যয় ডেকে আনবে।
এই পৃষ্ঠার বিন্যাসটি কল্পনা করুন:
MainPage.html
IframedPage1.html (named "foo")
IframedPage2.html (named "bar")
IframedPage3.html (named "baz")
ফ্রেম "বাজ" এ আপনি একটি লিঙ্ক ক্লিক করেন (কোনও লক্ষ্য নেই, "বাজ" ফ্রেমে লোড হয়) এটি দুর্দান্ত কাজ করে।
যদি পৃষ্ঠাটি লোড হয়ে যায়, তবে এটিকে বিশেষ এইচটিটিএমএল বলতে দাও, "এটির" "বার" নামক কোনও প্যারেন্ট ফ্রেম রয়েছে কিনা তা সত্য (প্রত্যাশিত) ফিরে আসবে কিনা তা পরীক্ষা করতে জেএস ব্যবহার করে।
এখন আসুন আমরা বলতে পারি যে স্পেশাল এইচটিএমএল পৃষ্ঠাটি যখন লোড হয় তখন পিতামাতার ফ্রেমটি পরীক্ষা করে (অস্তিত্ব এবং এর নামের জন্য, এবং যদি এটি "বার" হয় তবে বার বারে এটি নিজেকে পুনরায় লোড করে eg
if(window.parent && window.parent.name == 'bar'){
window.parent.location = self.location;
}
এ পর্যন্ত সব ঠিকই. এখন বাগ আসে।
আসল লিঙ্কটি স্বাভাবিকের মতো ক্লিক করার পরিবর্তে এবং "বাজ" ফ্রেমে স্পেশাল এইচটিএমএল পৃষ্ঠাটি লোড করার পরিবর্তে আপনি এটি মাঝখানে ক্লিক করেছেন বা এটি একটি নতুন ট্যাবে খুলতে পছন্দ করেছেন chose
যখন নতুন ট্যাবটি লোড হয় ( কোনও প্যারেন্ট ফ্রেম ছাড়াই! ) পৃষ্ঠা পৃষ্ঠা লোডিংয়ের একটি অন্তহীন লুপ প্রবেশ করবে! কারণ জাভাস্ক্রিপ্টে আইআর ফ্রেম কাঠামোটিকে "অনুলিপি করে" যেমন নতুন ট্যাবটির কোনও পিতা বা মাতা থাকে এবং সেই পিতামাতার নাম "বার" থাকে।
সুসংবাদ, এটি যাচাই করা হচ্ছে:
if(self == top){
//this returns true!
}
নতুন ট্যাবে সত্য ফিরে আসে, এবং এইভাবে আপনি এই বিজোড় অবস্থার জন্য পরীক্ষা করতে পারেন।