Tengo problemas para que esto funcione. Primero intenté configurar mis etiquetas de script como cadenas y luego usar jquery replaceWith () para agregarlas al documento después de cargar la página:
var a = '<script type="text/javascript">some script here</script>';
$('#someelement').replaceWith(a);
Pero obtuve errores literales de cadena en esa var. Luego intenté codificar la cadena como:
var a = '&left;script type="text/javascript">some script here<\/script>';
pero enviando eso a las replaceWith()
salidas solo esa cadena al navegador.
¿Alguien puede decirme cómo haría para agregar dinámicamente una <script>
etiqueta en el navegador después de la carga de la página, idealmente a través de jQuery?
<script>
etiqueta al documento?eval()
función. Pero el uso deeval()
casi siempre sugiere que existe una mejor manera de hacer lo que está tratando de hacer.document.write
y lo llama después de cargar la página, destruirá la página.<iframe>
elementos? Puede aplazar la configuración de la<iframe>
URL hasta que esté listo.Respuestas:
Puede poner el script en un archivo separado, luego usarlo
$.getScript
para cargarlo y ejecutarlo.Ejemplo:
fuente
$.getScript
simplemente cargará un archivo .js a través de AJAX y lo ejecutará. No es necesario que el script esté en el DOM para poder acceder a un div en su página.$.getScript()
el script deberá estar en el mismo dominio o tanto el dominio remoto como el navegador deberán ser compatiblesCORS
.$.ajax
notas: "Las solicitudes de script y JSONP no están sujetas a las mismas restricciones de política de origen". fuente . En otras palabras,$.getScript
puede extraer archivos .js de otros dominios, no solo del suyo .Intente lo siguiente:
http://api.jquery.com/append
fuente
append
para agregar un script. Agregar hace que incluso el script en línea se evalúe de inmediato (justo lo que necesitaba). GraciasEsta es la forma correcta de hacerlo con JQuery moderno (2014):
o si realmente desea reemplazar un div, puede hacer:
fuente
Una forma más sencilla es:
También puede utilizar este formulario para cargar css.
fuente
</script>
embargo, es posible que desee evitar poner la cadena en su fuente, ya que puede causar problemas de análisis: stackoverflow.com/questions/236073/…/
hizo el truco para mí:$('head').append('<script src="your.js"><\/script>');
Esta respuesta es técnicamente similar o igual a lo que respondió jcoffland. Acabo de agregar una consulta para detectar si un script ya está presente o no. Necesito esto porque trabajo en un sitio web de intranet con un par de módulos, de los cuales algunos comparten scripts o traen los suyos propios, pero estos scripts no necesitan cargarse cada vez más. Estoy usando este fragmento desde hace más de un año en el entorno de producción, funciona como un encanto. Comentándome a mí mismo: Sí, lo sé, sería más correcto preguntar si existe una función ... :-)
fuente
Hay una solución que parece más un truco y estoy de acuerdo en que no es la forma más elegante de hacerlo, pero funciona al 100%:
Digamos que su respuesta AJAX es algo como
Tenga en cuenta que me he saltado la etiqueta de cierre a propósito. Luego, en el script que carga lo anterior, haga lo siguiente:
Simplemente no me preguntes por qué :-) Esta es una de esas cosas a las que he llegado como resultado de ensayos desesperados, casi aleatorios y fallidos.
No tengo sugerencias completas sobre cómo funciona, pero curiosamente, NO funcionará si agrega la etiqueta de cierre en una línea.
En momentos como estos, siento que he logrado dividir por cero.
fuente
<\/script>
aunque sería válidoEjemplo:
Deberia de funcionar. Lo intenté; mismo resultado. Pero cuando usé esto:
Esto funcionó para mí.
Editar: olvidé el
#someelement
(por cierto, podría querer usarlo#someElement
debido a convenciones)Lo más importante aquí es + =, por lo que el html se agrega y no se reemplaza.
Deja un comentario si no funcionó. ¡Me gustaría ayudarte!
fuente
Aquí hay una forma mucho más clara, sin necesidad de jQuery, que agrega un script como último hijo de
<body>
:Pero si desea agregar y cargar scripts, use el método de Rocket Hazmat .
fuente
Si está intentando ejecutar JavaScript generado dinámicamente, sería un poco mejor usar
eval
. Sin embargo, JavaScript es un lenguaje tan dinámico que realmente no debería necesitarlo.Si la secuencia de comandos es estática, entonces la
getScript
sugerencia de Rocket es el camino a seguir.fuente