Problema aparentemente simples com typeof

8 respostas
anderson.bonavides

Pessoal tenho este código abaixo que verifica o nível do método boolean que retorna true obterPrimeiroNivel() caso seja encontrado, porém não estou conseguindo fazer a validação com parent, como poderia resolver isto?

if (typeof parent.obterPrimeiroNivel()) { 
		parent.iniciarContador();
	} else {			
		parent.parent.iniciarContador();			
	} // if (parent.parent...

Grato!

8 Respostas

wagnerfrancisco

Não entendi exatamente o que você deseja fazer, mas certamente tem algo errado com este typeof. O typeof retorna o tipo do objeto passado a ele. Se você faz isso:

typeof parent.obterPrimeiroNivel()

Ele sempre vai retornar ‘boolean’. E ‘boolean’ é uma string que será interpretada como true dentro do if. Será que você precisa deste typeof?

anderson.bonavides

wagnerfrancisco:
Não entendi exatamente o que você deseja fazer, mas certamente tem algo errado com este typeof. O typeof retorna o tipo do objeto passado a ele. Se você faz isso:

typeof parent.obterPrimeiroNivel()

Ele sempre vai retornar ‘boolean’. E ‘boolean’ é uma string que será interpretada como true dentro do if. Será que você precisa deste typeof?

Ele não encontra o método obterPrimeiroNivel() porque o nível da página correto é parent.parent e eu preciso verificar o nível dinamicamente. Segundo os tutoriais typeof verifica booleanos e tipos de objetos: arrays, strings…

E

você quer saber se é o TOP da página? Eu faço assim:

Mas aí vai da sua “criatividade”, que eu saiba não tem um método nativo do js que verifique diretamente se é frame ou não. Pode comparar os objetos parent, window e document.

Obs: em uma busca rápida no w3schools: http://www.w3schools.com/jsref/prop_win_top.asp

anderson.bonavides

Não rolou com ambos.

:roll:

wagnerfrancisco

Eu não entendi exatamente o que você precisa. Tem como postar o método obterPrimeiroNivel?

anderson.bonavides

É um boolean retorna apenas um true.

function obterPrimeiroNivel(){ return true; }

wagnerfrancisco

Você precisa ir percorrendo o parent até achar esse método?

var current = parent;
while (current.obterPrimeiroNivel == null) {
   current = current.parent;
}
current.iniciarContador();

Me parece que é isso. Se for isso o método obterPrimeiroNivel é até desnecessário…

anderson.bonavides

wagnerfrancisco:
Você precisa ir percorrendo o parent até achar esse método?

var current = parent;
while (current.obterPrimeiroNivel == null) {
   current = current.parent;
}
current.iniciarContador();

Me parece que é isso. Se for isso o método obterPrimeiroNivel é até desnecessário…

Isso é perfeito ao que preciso, obrigado Wagner Francisco

Criado 28 de junho de 2012
Ultima resposta 28 de jun. de 2012
Respostas 8
Participantes 3