Ir para conteúdo

Arquivado

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

SkyWalker.TO

AJAX :: Executando scripts dentro de uma pagina carregada com Ajax

Recommended Posts

bom.. a função que interessa é esta:

 

como funciona: Digamos que você tenha um site, onde carrega os conteudos dentro de um layer utilizando ajax!.. e alguns desses conteudos possuem javascript.

 

fiz uma função, que le o texto retornado pelo XMLhttpRequest e procura por tags "<script>" e "</script>" e executa tudo o q tem dentro!.

 

function extraiScript(texto){	// inicializa o inicio ><	var ini = 0;	// loop enquanto achar um script	while (ini!=-1){		// procura uma tag de script		ini = texto.indexOf('<script', ini);		// se encontrar		if (ini >=0){			// define o inicio para depois do fechamento dessa tag			ini = texto.indexOf('>', ini) + 1;			// procura o final do script			var fim = texto.indexOf('</script>', ini);			// extrai apenas o script			codigo = texto.substring(ini,fim);			// executa o script			eval(codigo);		}	}}

no ajax fica:

 

if (xmlhttp.readyState==4){			// coloca o valor no objeto requisitado			texto=unescape(xmlhttp.responseText.replace(/\+/g," "));			document.getElementById(destino).innerHTML=texto;			// executa scripts			extraiScript(texto);}
O que me fez desenvolver isso, foi a necessidade de recarregar o centro da pagina quando um usuario faz login ou logoff no meu sistema.

 

uma coisa interessante, coloque o codigo js nas paginas q você carrega com ajax e o titulo do navegador vai mudar conforme o local, ex:

 

<script>document.title = ".:NomeDoSite - Historia";</script><script>document.title = ".:NomeDoSite - Busca";</script>

 

deem uma olhada:

http://200.163.75.112/classi

matricula: 123

senha: 123

 

espero que seja util

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso ai não funciona pra funções certo ?pelo menos aqui não foi... ao acessar a função que retornei e apliquei no eval ele fala que não achou... =/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Putz...é isso q eu precisava.muito loco...vou testar aqui pra ver se da certinho agora.PERFEITO KRA!!!Nossa...eu tava loco pensando em como fazer isso, se você fosse muié eu t dava um bjo de lingua...mesmo se fosse feia.huahauhauhaaauhauahuahauhauhauaa

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso ai não funciona pra funções certo ?pelo menos aqui não foi...ao acessar a função que retornei e apliquei no eval ele fala que não achou... =/

É verdade, mas a função do skywalker não deixa de ser uma maravilha.O pita iniciou esforços pra ver se alguém consegue carregar dinamicamente funções do java script: http://forum.imasters.com.br/index.php?showtopic=174045

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poxa, eu não entendi essa parte de layer com ajax na primeira postagem... Eu so meio newb no ajax, alguém poderia me explicar ??

Como posso te dizer...isso ai é pra quem já "começou" ou deu um start... pelo que entendi você nem "fez" nada em ajax etc...tem uns exemplos na net etc etcse precisar te passo um cod que executa, e "imprime" onde você quer o arquivo lido etcflw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui resolver o problema de não carregar funções.

É só usar um createElement ao invés do eval, que as funções serão carregadas também.

 

Testado no FF 1.5 e no IE 6.

 

Novo código ficou:

function extraiScript(texto){//Maravilhosa função feita pelo SkyWalker.TO do imasters/forum//http://forum.imasters.com.br/index.php?showtopic=165277	// inicializa o inicio ><	var ini = 0;	// loop enquanto achar um script	while (ini!=-1){		// procura uma tag de script		ini = texto.indexOf('<script', ini);		// se encontrar		if (ini >=0){			// define o inicio para depois do fechamento dessa tag			ini = texto.indexOf('>', ini) + 1;			// procura o final do script			var fim = texto.indexOf('</script>', ini);			// extrai apenas o script			codigo = texto.substring(ini,fim);			// executa o script			//eval(codigo);			/**********************			* Alterado por Micox - micoxjcg@yahoo.com.br			* Alterei pois com o eval não executava funções.			***********************/			novo = document.createElement("script")			novo.text = codigo;			document.body.appendChild(novo);		}	}}

PS: Por favor, não apaguem os créditos ao skywalker e a mim quando usarem as funções. Um pouco de ética é bom...

Compartilhar este post


Link para o post
Compartilhar em outros sites

novo = document.createElement("script")			novo.text = codigo;			document.body.appendChild(novo);

Simplão:

 

1) Crio um novo elemento de script

2) coloco o código dentro dele

3) Mando o browser colocar o script como filho do browser.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Micox, sua solução funciona, mas acredito que ela tenha uma falha ainda ><ex.. eu chamo a pagina X via ajax e ela tem a função foo... se depois de um tempo eu carrego uma pagina Y e depois eu recrio a pagina X, vai criar uma segunda função com o mesmo nome.PS. Obrigado pelos elogios, tinha até abandonado o forum pois naum tinha recebido nenhum feedbackXD

Compartilhar este post


Link para o post
Compartilhar em outros sites

ex.. eu chamo a pagina X via ajax e ela tem a função foo... se depois de um tempo eu carrego uma pagina Y e depois eu recrio a pagina X, vai criar uma segunda função com o mesmo nome.

heheh. Não entendi seu exemplo. Explica melhor ae... hehehTipo, o Pita também trabalhou e fez outra nova versão, dá uma olhada lá nela também.Assim agente finaliza um script redondinho e coloca ele no laboratório.Valeus...

Compartilhar este post


Link para o post
Compartilhar em outros sites

elel falou que se você chamar a pagina X que extrai e cria uma função, carregar a pagina Y, e depois chamar a pagina X de novo, ele vai criar a função criada na primeira vez novamente. Teria que fazer alguns flags pra saber o que já foi carregado. Assim seria como se as funções estivesse no cache da página :)Abraços, t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Puts. Agora sakei... Com o eval deve dar o mesmo problema.Mas acho que talvez isso não chegue a ser um problema não.Se eu carregar uma função com o nome de foo (como ele falou) e depois de um tempo eu carregar OUTRA com o nome de foo, ela não dará problemas no interpretador javascript (creio eu), ela apenas será SOBRESCRITA.Que que voces acham?PS.: Acho que rolava dos moderas de PHP moverem este pro fórum de javascript>Ajax.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Há um erro q naum sei se vcs corrigiram.

nas scripts onde há sinal + ele fica em branco entenderam

tipow

<script>variavel="bla";alert("bla"+variavel+"bla");</script>

fica assim:

<script>variavel="bla";alert("bla" variavel "bla");</script>

da pra corrigir esse erro?

Se vcs conseguirem postem a correcao, se eu conseguir eu posto...

 

E corrijam isso:

var fim = texto.indexOf('<script>', ini);

 

ele deve ser escrito assim para que naum haja erros:

var fim = texto.indexOf('<scr'+'ipt>', ini);

fmz http://forum.imasters.com.br/public/style_emoticons/default/devil.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ae kra naum to conseguindo execultar funcões

 

Tipo

function funcao(Variavel){

alert(Variavel)

}

 

java script:funcao("Mensagem");

 

Quando uso um link ele acusa como se naum existisse a função

 

O q há de errado?

 

-----------------------------------------------------------------------------------

Post Mesclado

-----------------------------------------------------------------------------------

 

descobri o erro só que eu tive que modificar o código de vcs

Agora tah dah hora

Depois eu posto e crie com esse mesmo código uma leitura do titulo

"<title></title>", pra quem for montar browsers ou páginações

 

Falow

 

-----------------------------------------------------------------------------------

Post Mesclado

-----------------------------------------------------------------------------------

 

Eu to postando aqui por q esse sistema é o mesmo de rodar SCripts

Eu montei esse código pq naum consegui acessar esse host:

http://200.163.75.112/classi

 

O código pra pegar titulo ficou assim

function MudarTitulo(texto){//Eliminia quebra de linhastexto = texto.replace(/\n/g,"");var inicio = 0;inicio = texto.indexOf('<title', inicio);if (inicio >=0){inicio = texto.indexOf('>', inicio)+1;var fim = texto.indexOf('/title>', inicio);var fim = texto.indexOf('<', inicio);Titulo = texto.substring(inicio,fim);document.title=Titulo;}}

Eu coloquei o replace caso as pessoas escrevam o titulo assim:

<title>

titulo

</title>

 

Tá eu sei que vaiser ultio

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou usando sua funcao extrairscript() so que ta dando um erro de

operação anulada e nao estou conseguindo tirar ?

 

isso so no explorer

 

http://url/.

 

na verdade tenta abrir essa url ai e nao sei onde ele esta chamando esse ponto apareceu depois que inseri a funcao extrairscript se poder me ajudar ficarei grato.

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.