Como capturar os dados de script na página?
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 */
}
};Discussão (2)
Carregando comentários...