Eu sempre tentei fazer uma chamada de um arquivo Java Script externo dentro de outro. E sempre tive problemas.
Estava fazendo manutenção em um código, quando me deparei com o código do analytics. E percebi que o Google faz isso a décadas.
Se você, como eu, ainda não sabe(sabia) como fazer isso, veja:
<script type="text/javascript">
document.write(unescape("%3Cscript src='nomedoarquivo.js' type='text/javascript'%3E%3C/script%3E"));
</script>
É simples e funcional. Nunca mais eu farei algo concatenando strings com strings, como:
<script type="text/javascript">
document.write('<scr '+ 'IPT type="text/javascript" SRC="arquivo.js">< /SCRIPT>');
</scr></script>
Fui super contente avisar meu colega de trabalho pelo MSN, o Pedro Rogério que me mostrou uma outra forma. É um pouco mais complexa, utiliza o createElement por DOM. E pode funcionar melhor para scripts dinâmicos.
function include(file_path) {
/**
* criando um elemento script:
* </script><script></script>
*/
var j = document.createElement("script");
/**
* informando o type como text/javacript:
* <script type="text/javascript"></script>
*/
j.type = "text/javascript";
/**
* Inserindo um src com o valor do parâmetro file_path:
* <script type="javascript" src="+file_path+"></script>
*/
j.src = file_path;
/**
* Inserindo o seu elemento(no caso o j) como filho(child) do BODY:
* <html><body><script type="javascript" src="+file_path+"></script></body></html>
*/
document.body.appendChild(j);
}
/**
* incluindo um arquivo com a função include()
*/
include("arquivo.js");
function include_once(file_path) {
var sc = document.getElementsByTagName("script");
for (var x in sc) {
if (sc[x].src != null) {
sc[x].src.indexOf(file_path) != -1) return;
}
include(file_path);
}
}
/**
* incluindo um arquivo com a função include_once()
*/
include_once("arquivo.js");
/**
* incluindo um arquivo com a função include()
*/
include("arquivo.js");