Ir para conteúdo
Omar~

Como capturar os dados de script na página?

Recommended Posts

Como eu posso capturar esses dados de um arquivo?

 


<script src="qualquer.js"></script>

<script>
    function funcaoQualquer() {
        return false;
    }
</script>

 

Preciso transportar eles para outro.

 

Vejam... Criei uma função ajax para abrir arquivos em uma div, o que até aí tudo bem, só que funções com Asynchronous, apesar de estarem incluídas, não podem mais manipular o DOM.

Então a solução é na página A que receberá o ajax da página B incluímos a função que queremos executar em B.

Só que esse é meu problema, não poder incluir as funções antes que a página B ou uma C,D,E.... vão ser requisitadas. Uma vez que essas páginas vão ser lidas a partir do banco de dados, e serão muitos arquivos para incluir deixando lento a aplicação, hora que nem tudo será necessário.

 

Os testes que fiz, e se tornou viável é: Capturar esses valores na página que é chamada pelo ajax no caso a B e transportar para a página A que executa o ajax. Porém não conseguir capturar de forma distinta cada situação, onde uma vez tenho um JS incluso, poderei também ter uma função sendo passada direto no escopo, outrora ambas situações vão ocorrer.

Em tese quando for um JS incluso mover ele para o head e quando não mover para o fim do body.

 

Situação 1 - Incluir arquivo JS.

Spoiler

var $js = document.createElement('script');
$js.type = 'text/javascript';
/* Isso irá criar uma entrada de requerindo o arquivo teste.js no head da página A
* Porém não conseguir capturar o valor SRC que está na requisição da página B
* para inserir no no local como parâmetro
* */
$js.src = 'teste.js';
         
document.getElementsByTagName('head')[0].appendChild($js);

 

 

Situação 2 - Incluindo código

Spoiler

/* Isso vai pegar os códigos na página B e inserir no final do body da página A 
* Porém inviabiliza o métod 1
* */
var $js = document.createElement('script');
var $jsI = $loadDiv.getElementsByTagName('script');
for (i = 0; i < $jsI.length; i++) {
    $js.text += $jsI[i].innerHTML + '\r\n';
}
document.body.appendChild($js);

 

 

 

Se precisar, acredito que não mas essa é a página A que chama o ajax e tem a página B inclusa.

 

Spoiler

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script src="AjaxRequest.js" type="text/javascript"></script>
    </head>
    <body>
        <div class="ajax-progress"></div>
        
        <button onclick="ajx.linkAjax('carregar', 'pag-b.php', null, null);">XXX</button>

        <div id="carregar"></div>

        <script>
            ajx = new AjaxRequest();
        </script>
    </body>
</html>

 

 

E esse é o arquivo JS que criei para executar o ajax.

Spoiler

var AjaxRequest = function () {
    var $httpRequest;
    var $progressBar = document.querySelector('.ajax-progress');
    var $progress = 0;
    var $loadDiv;

    if (window.XMLHttpRequest) {
        $httpRequest = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        try {
            $httpRequest = new ActiveXObject('Msxml2.XMLHTTP');
        } catch (e) {
            try {
                $httpRequest = new ActiveXObject('Microsoft.XMLHTTP');
            } catch (e) {
            }
        }
    }

    this.linkAjax = function (divName, fromHttp, urlReplace = null, progress = null) {

        $loadDiv = document.getElementById(divName);
        if (urlReplace) {
            //window.history.replaceState(null, null, fromHttp);
            window.history.replaceState(null, null, urlReplace);
        }
        if (progress) {
            $httpRequest.addEventListener('progress', updateProgress, false);
        }
        $httpRequest.open('GET', fromHttp);
        $httpRequest.send();
        $httpRequest.onreadystatechange = function () {
            try {
                if ($httpRequest.readyState === 4) {

                    if ($httpRequest.status === 200) {
                        $loadDiv.innerHTML = $httpRequest.responseText;
                        appendjS();
                        if (progress) {
                            $progressBar.style.width = '0';
                        }
                    }
                }
            } catch (e) {
                $loadDiv.innerHTML = '<div class="font-jumbo align-center margin-top">\n\
                Erro ao requisitar arquivo do servidor!</div>';
                $progressBar.style.width = '0';
            }
        };
    };
    /* FUNÇÕES A FAZER !!!!!!!!!
    this.postAjax = function () {};
    this.downloadAjax = function () {};
    this.uploadAjax = function () {};
    */

    function updateProgress(e) {
        if (e.lengthComputable) {
            $progress = (e.loaded / e.total) * 100;
            $progressBar.style.width = $progress + '%';
        }
        return true;
    }

    function appendjS() {
        /* Aqui onde a mágica de realocação dos JS deve acontecer */
    }
};

 

 

 

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pra da um UP e dizer que consegui resolver o assunto de trasportar os scripts da página carregada para a página principal. Mas surgiu outro problema.

 

Acontece que se for carregando páginas e mais páginas por ajax, lógico a página principal vai sendo sobrecarregada de funções.

 

Fiz uns testes com jQuery e esse problema não ocorre. Todos scripts da página carregada por ajax funcionam. Aí que está não quero usar jQuery.

 

A função usada para transportar os scripts é assim:

Spoiler

    function appendjS(script) {
        var $src;
        var $endSrc;
        var $newSrc;
        var $stringSrc;
        var $coutSrc;

        $coutSrc = script.indexOf('<script', 0);

        while ($coutSrc != -1) {
            $newSrc = document.createElement('script');
            $src = script.indexOf(' src', $coutSrc);
            $coutSrc = script.indexOf('>', $coutSrc) + 1;
            if ($src < $coutSrc && $src >= 0) {
                $coutSrc = $src + 4;
                $endSrc = script.indexOf('.', $coutSrc) + 4;
                $stringSrc = script.substring($coutSrc, $endSrc);
                $stringSrc = $stringSrc.replace("=", "").replace(" ", "").replace("\"", "").replace("\"", "").replace("\'", "").replace("\'", "").replace(">", "");
                $newSrc.src = $stringSrc;
            } else {
                $endSrc = script.indexOf('</script>', $coutSrc);
                $stringSrc = script.substring($coutSrc, $endSrc);
                $newSrc.text = $stringSrc;
            }
            $loadDiv.appendChild($newSrc);
            $coutSrc = script.indexOf('<script', $endSrc);
            $newSrc = null;
        }
    }

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

×

Informação importante

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