Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Web Developer

Funções fora do iframe

Recommended Posts

Acredito que seja algo simples, mas não estou achando uma forma de fazê-lo. Como acesso uma função javascript na página principal de dentro do iframe? Quero acessar e/ou enviar valores.Isto é urgente! Ficarei muito grato se alguém ajudar.Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites
fnome = "form1"; // ID ou name do objeto que você pretende manipular// condicional para evitar incompatibilidade entre browsersif(document.all){	obj = parent.document.all[fnome];}else{	if(document){		obj = parent.document[fnome];	}else{		obj = parent.getElementById(fnome);	}}alert( obj ); // se retornar [object], provavelmente está funcionando// obs: nao testei nos browsers recentes, mas funciona nos mais populares

Compartilhar este post


Link para o post
Compartilhar em outros sites

fmzse encontrar alguma adaptação melhor e simples de usar poste aí esse script que postei utilizo num site de e-commerce bastante visitado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não deu certo, por alguma razão o iframe não reconhece a pagina que o contem como parent, top ou qualquer coisa parecida, não acho que o script esteja errado não, acho que é pela forma como montei a estrutura, teria que colocar o código todo aqui para entenderem, não seria viável. O complicado, é que páginas não possuem ids, a não ser qd vindas de um window.open. O que acontece é que se eu usar algo como:

window.parent.insertHTML(html); //sendo insertHTML uma função na pagina principal
não funciona de jeito nehum, mas se eu uso outra função predefinida, só para testar a comunicação, ele funciona, assim:

window.parent.location="http://forum.imasters.com.br/";

No exemplo que você mostrou é para acessar um objeto, isso dá de boa, até de outras formas, mas preciso acessar uma função, não um objeto, preciso enviar um valor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

o que não dá para entender, é que se eu abro uma nova página do arquivo página.js com um window.open, a seguinte linha da página aberta funciona:window.opened.insertHTML(html);mas se eu tento acessar a mesma função, de dentro do iframe, subtituindo opened por parent, não funciona:window.parent.insertHTML(html);PORQUE MEU DEUS!!!! É A MESMA COISA!!!!!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

salve como parent.html

 

<html><head>	<script language=javascript>	function setar_obj(eln){		if(document.all){		return document.all[eln];		}else{			if(document){			return document[eln];			}else{			return getElementById(eln);			}		}		}	function teste(ms){ 		alert(ms);	}	function vai_bagulho(){		fn = 'frm1';		ob = setar_obj(fn);		ms = '';		ms = ob['msg'].value;		if( ms == '' ){			segundos = 1;			tempo	= (segundos * 1000);			time_id  = setTimeout("vai_bagulho()",tempo);		}else{			clearTimeout(time_id);			teste(ms);		}	}	window.onload = vai_bagulho;	</script></head><body>	<center>	<form name=frm1 id=frm1 action=./ method=post>	<input type=hidden name=msg value=''>	</form>	<iframe name=iframe1 id=iframe1 src=parent-frame.html width=200 height=200></iframe>	</center></body></html>

 

 

salve como parent-frame.html

 

<script language=javascript>	fnome = "frm1"; // ID ou name do objeto que você pretende manipular		// condicional para evitar incompatibilidade entre browsers	if(document.all){		obj = parent.document.all[fnome];	}else{		if(document){			obj = parent.document[fnome];		}else{			obj = parent.getElementById(fnome);		}	}	function teste1(obj){	obj['msg'].value = "aih maluko! funcionou !!!";	}</script><input type=button value=testar! onclick="teste1(obj);">

 

testado no IE, FF e NE

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia amigos.

 

Para acessar uma função que está na página principal, chamando de dentro do iframe:

 

parent.minhaFuncao();

Para acessar uma função que está dentro do iframe, chamando da página principal:

 

document.frames['idDoMeuIFrame'].minhaOutraFuncao();

Veja se é isso.

 

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então Eduardo, desta maneira ai não estava acessando a função, uma função simples estava funcionando, mas com esta mais complexa não, mas está certinho amigo, o comando é este mesmo, teoricamente não era para nada dar errado. Muito obrigado pela dica. Eu já descobri o que era.hinom, valew, desse jeito deu certo também, o caso que não estava funcionando era porque dentro da função outras funções precisavam ser acessadas também para liberar o campo rich text (como esse do forum) para receber os dados, mesmo colocando parent. nas funções internas não estava dando, o jeito foi executar tudo que eu precisava de forma independente, criar uma função na página "pagina.js" apenas para receber os dados já preparados na função do iframe, ai pronto, esta função acessa as outras que precisar na mesma página!UFFAAA!!!! Que rolo. hehehe, mas tem q ser assim, as funções são acessadas por outras ações também, por isso não podia por tudo numa só, sem contar que isso iria aumentar o tamanho das páginas e reduzir o desempenho.Por fim, deu certo, que as dicas de hinom e de Eduardo ajudem também outros profissionais web! Valew galera!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ai pessoal... apesar do tópico ser bem antigo, estou reabrindo o mesmo porque tem relevancia com a minha dúvida e seria interessante ficar junto pra complementar...

 

Testei o código passado pelo colega hinom e funcionou tudo certinho...

 

 

 

Agora eu preciso que o parent.html esteja em um dominio e o parent-frame.html em outro domínio... porém tem a questão de limitações de segurança de script entre dominios...

 

No firefox nem deu nada indicando erro, simplesmente nada acontece... já no IE 8 quando abro o parent.html que está no domínio1 (www.dominio1.com/parent.html) ele carrega o conteúdo do parent-frame.html que está no domínio2 (www.dominio2.com.br/parent-frame.html)... Porém, já de cara dá um erro de script:

 

Detalhes dos erros da página da Web

 

Agente de Usuário: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)

Carimbo de data/hora: Fri, 27 May 2011 18:27:16 UTC

 

 

Mensagem: Acesso negado.

 

Linha: 7

Caractere: 17

Código: 0

URI: http://dominio2.com/parent-frame.html

 

E quando clico no botão testar, ocorrem mais erros:

 

Detalhes dos erros da página da Web

 

Agente de Usuário: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)

Carimbo de data/hora: Fri, 27 May 2011 18:28:10 UTC

 

 

Mensagem: Acesso negado.

 

Linha: 7

Caractere: 17

Código: 0

URI: http://dominio2.com/parent-frame.html

 

 

Mensagem: 'obj' não está definido

Linha: 21

Caractere: 1

Código: 0

URI: http://dominio2.com/parent-frame.html

 

 

Fiz algumas pesquisas e vi que tem muitas limitações de scripts em domínios diferentes... mas será que não existe alguma maneira de resolver isso?

 

Em flash/flex a gente usa um script crossdomain.xml onde a gente consegue fazer 2 dominios diferentes conversarem e até travar o acesso a determinados dominios... não existe nada parecido pra javascript?

 

 

Valeu!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.