¿Es posible invocar un archivo .js
sincrónicamente y luego utilizarlo inmediatamente después?document.createElement ("script") sincrónicamente
<script type="text/javascript">
var head = document.getElementsByTagName('head').item(0);
var script = document.createElement('script');
script.setAttribute('type', 'text/javascript');
script.setAttribute('src', 'http://mysite/my.js');
head.appendChild(script);
myFunction(); // Fails because it hasn't loaded from my.js yet.
window.onload = function() {
// Works most of the time but not all of the time.
// Especially if my.js injects another script that contains myFunction().
myFunction();
};
</script>
Esto se simplifica. En mi implementación, las cosas de createElement están en una función. Pensé en agregar algo a la función que pudiera verificar si una determinada variable se instanciaba antes de devolver el control. Pero aún existe el problema de qué hacer al incluir js de otro sitio sobre el que no tengo control.
¿Pensamientos?
Editar:
He aceptado la mejor respuesta por el momento, ya que da una buena explicación de lo que está pasando. Pero si alguien tiene alguna sugerencia sobre cómo mejorar esto, estoy abierto a ellos. Aquí hay un ejemplo de lo que me gustaría hacer.
// Include() is a custom function to import js.
Include('my1.js');
Include('my2.js');
myFunc1('blarg');
myFunc2('bleet');
sólo quiero evitar tener que conocer el funcionamiento interno demasiado y acaba de ser capaz de decir: "Me gustaría utilizar este módulo, y ahora voy a utilizar un código de él."
no he encontrado la manera de hacer referencias al mismo valor sin crear una matriz (para el recuento). De lo contrario, creo que se explica por sí mismo (cuando todo está cargado, 'eval()' cada archivo en el orden dado, de lo contrario simplemente almacena la respuesta). –