I was traversing through a frame hierarchy, and tried the following to find the top frame:
var win = window;
while (win.parent) {
//perform actions on win
win = win.parent;
}
By now, I know that the correct looping condition must be:
while (win !== top) {
The existence check on win.parent
seemingly creates an infinite loop. Is there any particular reason why it is like this? Why should top
have a parent?
I was traversing through a frame hierarchy, and tried the following to find the top frame:
var win = window;
while (win.parent) {
//perform actions on win
win = win.parent;
}
By now, I know that the correct looping condition must be:
while (win !== top) {
The existence check on win.parent
seemingly creates an infinite loop. Is there any particular reason why it is like this? Why should top
have a parent?
-
Have you tried to check what's
top.parent
? – Madara's Ghost Commented Mar 23, 2012 at 10:39 - Perhaps that is how 'top' is flagged - maybe the top frame has itself as a parent? – Martin James Commented Mar 23, 2012 at 10:40
2 Answers
Reset to default 7You should also check if window.parent == window
is false
. Otherwise you will end up with an infinite loop. If there is no parent, the parent property will reference to itself (infinite loop).
var win = window;
while (win.parent && win.parent != win) {
//perform actions on win
win = win.parent;
}
http://jsfiddle/EZfHf/
I found this on MDN:
If a window does not have a parent, its parent property is a reference to itself.
top
's parent is itself.
top == top.parent //true