Ir para conteúdo

POWERED BY:

Arquivado

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

Jessica Ferreira

[Resolvido] deixar o código mais bonito

Recommended Posts

Fórum foi feito pra posta, então eu vo postando...

 

Criei um script aqui em javascript para capturar os iframes da página...

 

<textarea name="request" id="txt" cols="100" rows="30"></textarea>
<script>
   arrayframe = new Array();
   iframe = document.getElementsByTagName('iframe');

   function iframes() {
       //contendo iframe adiciona as url no arrayframe
       for (var i = 0; i < iframe.length; i++) {
           arrayframe.push(iframe[i].src);
       }
       // deleta todos os frame e variavel iframe é limpada
       for (var i = 0; i < arrayframe.length; i++) {
           elem = document.getElementsByTagName('iframe')[0];
           (elem.parentNode).removeChild(elem);
       }

       //arrayframe contem as url então faz o request e imprime
       for (var i = 0; i < arrayframe.length; i++) {

           //alert(arrayframe.length);
           new Ajax.Request(arrayframe[i], {
               method: 'get',
               onSuccess: function (transport) {
                   var req = transport.responseText || "Ixi deu não";

                   //abaixo é criado um loop para verificar se contem alguma div ja existente, vai somando indo de 1 a 100 div1, div2 ,div3 se a div4 nao existir entao cria a div 4 com o conteudo da requisiçao (req)
                   for (var div = 1; div < 100; div++) {

                       //verifica se iframe existe
                       if (document.getElementById('iframe' + [div]) == undefined) {
                           var
                           //cria elemento div numerado
                           divTag = document.createElement("div");
                           divTag.id = "iframe" + [div];
                           document.body.appendChild(divTag);

                           //adciona oconteudo do request na div
                           document.getElementById('iframe' + [div]).innerHTML = (req);

                           break;
                       }
                   }
               },
               onFailure: function () {}
           });

       }
       arrayframe.length = 0;

   }

   iframes(); // inicia o processo, executa primera verificaçao de iframes na pagina
   function time() // resposanvel por verificar se tem iframe na pagina até que nao tenha mais nenhum, preciso porque a requisiçao demora e o script continua
   {
       iframe = document.getElementsByTagName('iframe');
       if (iframe.length > 0) {
           for (var i = 0; i < iframe.length; i++) {
               iframes()
           }
       }
   }

   tempo = setInterval("time()", 0);

   function mydiv() {

       div = document.getElementsByTagName('div');

       for (var i = 0; i < div.length; i++) {
           conteudo = document.getElementById(div[i].id).innerHTML
           var textarea = document.getElementById("txt").value += div[i].id + conteudo;
           document.getElementById(div[i].id).innerHTML = "";
       }

   }

   setTimeout("mydiv()", 1500); // depois de 1 segundo já é para ter feito toda a tarefa entao passa o valor para o textarea
</script>

 

explicação de como o script funciona

adiciona os conteudo do iframe na div, e deleta os iframes, oque era iframe passa a ser conteudo div.

não só o conteudo do iframe da pagina como tambem o conteudo do iframe da outra pagina assim por diante...

 

para isso foi preciso faser uma requisição nos links do iframe para pegar o conteudo dela, nisso tem um tempo, acho que demora uns milessimos, ai entra uma dúvida o javascript funciona diferente do php?, pelo que eu sei o script funciona de cima para baixo fazendo tarefa por tarefa

 

se eu não colocar o setInterval, ele só pega o iframe que tem na pagina porque o tempo de fazer a requisiçao e exibir o conteudo com mais iframe já rodou o script inteiro

 

 

eu queria retirar o tempo do script, posso faser um break para aguardar até que a requisição seja concluida ai sim continuar o script ?

 

qualquer sugestão é bem vinda..

Compartilhar este post


Link para o post
Compartilhar em outros sites

O JavaScript funciona da mesma forma que o PHP, de cima para baixo, da esquerda para a diretita.

 

Porém, eu também não entendi o motivo, estou usando uma requisição Ajax e ele não espera que essa seja finalizada.

 

Eu fui obrigado a usar o .setTimeout(), creio que você também não tenha escolha.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O JavaScript funciona da mesma forma que o PHP, de cima para baixo, da esquerda para a diretita.

 

Porém, eu também não entendi o motivo, estou usando uma requisição Ajax e ele não espera que essa seja finalizada.

 

Eu fui obrigado a usar o .setTimeout(), creio que você também não tenha escolha.

 

é realmente não da para entender meu... era para esperar a requisição ser feita para depois seguir o script

mais não ele segue direto... vou deixar assim mesmo, só faser uns ajustes

 

valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites
estou usando uma requisição Ajax e ele não espera que essa seja finalizada.

isso é por causa do assincronimo da requisição.

 

Um ajax assincrono, não espera que a requisição volte, e continua com o script.

Um ajax sincrono, espera a requisição voltar, para depois continuar com o script.

 

É isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso é por causa do assincronimo da requisição.

 

Um ajax assincrono, não espera que a requisição volte, e continua com o script.

Um ajax sincrono, espera a requisição voltar, para depois continuar com o script.

 

É isso.

oi willian eu tentei um exemplo que você indicou ai no fórum assincrona, só que funciona apenas com xml

alterei o responseXML para responseText e não funcionou oque tá errado ? se liga

 

function getHTTPObject()
{
if(window.XMLHttpRequest)
{
	return new XMLHttpRequest();
} else
if(window.ActiveXObject)
{
	var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];

	for(var i = 0; i < prefixes.length; i++)
	{
		try
		{
			return new ActiveXObject(prefixes[i] + ".XMLHTTP");
		} catch (e) {}
	}
}
}

function consultar()
{
ajax = getHTTPObject();

ajax.onreadystatechange = processChange;
ajax.open("GET", "request.php", true);
ajax.setRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate");
ajax.setRequestHeader("Cache-Control", "post-check=0, pre-check=0");
ajax.setRequestHeader("Pragma", "no-cache");
ajax.send(null);
}

function processChange()
{
if(ajax.readyState == 4)
{
	if(!ajax.responseText.documentElement && ajax.responseStream)
	{
		ajax.responseText.load(ajax.responseStream);
	}

	var output = document.getElementById("output");
	//output.innerHTML = "";
	var xmlobj = ajax.responseText;
	var registros = xmlobj.getElementsByTagName("registro");
	for(i = 0; i < registros.length; i++)
	{
		output.innerHTML += registros[i].firstChild.nodeValue + "<br />";
		alert(registros[i].firstChild.nodeValue);
	}
}
}

 

thanks

Compartilhar este post


Link para o post
Compartilhar em outros sites

se você quer sincrono, o terceiro parametro deve ser false

ajax.open("GET", "request.php", true);

 

além disso, note que não basta trocar responseXML por responseTEXT, existem muitas outras dependências..

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.