Este parece ser un problema relacionado únicamente con Safari. Probé 4 en Mac y 3 en Windows y todavía no tengo suerte.
Estoy intentando cargar un archivo HTML externo y ejecutar el JavaScript que está incrustado.
El código que estoy tratando de usar es este:
$("#myBtn").click(function() {
$("#myDiv").load("trackingCode.html");
});
trackingCode.html
se ve así (simple ahora, pero se expandirá una vez / si consigo que esto funcione):
<html>
<head>
<title>Tracking HTML File</title>
<script language="javascript" type="text/javascript">
alert("outside the jQuery ready");
$(function() {
alert("inside the jQuery ready");
});
</script>
</head>
<body>
</body>
</html>
Veo mensajes de alerta en IE (6 y 7) y Firefox (2 y 3). Sin embargo, no puedo ver los mensajes en Safari (el último navegador con el que debo preocuparme: requisitos del proyecto, por favor, no guerras de llamas).
¿Alguna idea sobre por qué Safari ignora el JavaScript en el trackingCode.html
archivo?
Eventualmente, me gustaría poder pasar objetos JavaScript a este trackingCode.html
archivo para usarlos dentro de la llamada jQuery ready, pero me gustaría asegurarme de que esto sea posible en todos los navegadores antes de seguir ese camino.
$("#images").load(location.href+" #images",function(){ $.getScript("js/productHelper.js"); });
fuente
Una otra versión de la solución de John Pick justo antes, esto funciona bien para mí:
jQuery.ajax({ .... success: function(data, textStatus, jqXHR) { jQuery(selecteur).html(jqXHR.responseText); var reponse = jQuery(jqXHR.responseText); var reponseScript = reponse.filter("script"); jQuery.each(reponseScript, function(idx, val) { eval(val.text); } ); } ... });
fuente
Me doy cuenta de que esta es una publicación algo más antigua, pero para cualquiera que venga a esta página en busca de una solución similar ...
http://api.jquery.com/jQuery.getScript/
fuente
Esto no parece funcionar si está cargando el campo HTML en un elemento creado dinámicamente.
$('body').append('<div id="loader"></div>'); $('#loader').load('htmlwithscript.htm');
Miro el DOM de firebug y no hay ningún nodo de script, solo el HTML y mi nodo CSS.
¿Alguien se ha encontrado con esto?
fuente
Casi lo tienes. Dile a jquery que quieres cargar solo el script:
$("#myBtn").click(function() { $("#myDiv").load("trackingCode.html script"); });
fuente
Escribí el siguiente complemento jquery para la función de carga html: http://webtech-training.blogspot.in/2010/10/dyamic-html-loader.html
fuente
Pruebe con esto en trackingCode.html:
<script type="text/javascript"> $(function() { show_alert(); function show_alert() { alert("Inside the jQuery ready"); } }); </script>
fuente
Me encontré con esto donde los scripts se cargarían una vez, pero las llamadas repetidas no ejecutarían el script.
Resultó ser un problema al usar .html () para mostrar un indicador de espera y luego encadenar .load () después.
// Processes scripts as expected once per page load, but not for repeat calls $("#id").html("<img src=wait.gif>").load("page.html");
Cuando les hice llamadas por separado, mis scripts en línea se cargaron cada vez como se esperaba.
// Without chaining html and load together, scripts are processed as expected every time $("#id").html("<img src=wait.gif>"); $("#id").load("page.html");
Para más investigación, tenga en cuenta que hay dos versiones de .load ()
Una simple llamada .load () (sin un selector después de la url) es simplemente una forma abreviada de llamar a $ .ajax () con dataType: "html" y tomar el contenido devuelto y llamar a .html () para poner esos contenidos en el DOM . Y la documentación para dataType: "html" establece claramente que "las etiquetas de script incluidas se evalúan cuando se insertan en el DOM". http://api.jquery.com/jquery.ajax/ Entonces .load () ejecuta oficialmente scripts en línea.
Una llamada .load () compleja tiene un selector como load ("page.html #content"). Cuando se usa de esa manera, jQuery filtra a propósito las etiquetas de script como se explica en artículos como este: https://forum.jquery.com/topic/the-load-function-and-script-blocks#14737000000752785 En este caso, los scripts nunca correr, ni siquiera una vez.
fuente
Bueno, tuve el mismo problema que solo parecía suceder con Firefox, y no pude usar otro comando de JQuery excepto .load () ya que estaba modificando el front-end en archivos PHP existentes ...
De todos modos, después de usar el comando .load (), incrusté mi script JQuery dentro del HTML externo que se estaba cargando y pareció funcionar. Sin embargo, no entiendo por qué el JS que cargué en la parte superior del documento principal no funcionó para el nuevo contenido ...
fuente
Pude solucionar este problema cambiando
$(document).ready()
awindow.onLoad()
.fuente
Yendo a la respuesta de @efreed ...
Estaba usando
.load('mypage.html #theSelectorIwanted')
para llamar al contenido de una página por selector, pero eso significa que no ejecuta los scripts en línea dentro.En cambio, pude cambiar mi marcado para que se
'#theSelectorIwanted'
convirtiera en su propio archivo y uséload('theSelectorIwanted.html`, function() {});
y ejecutó bien los scripts en línea.
No todos tienen esa opción, ¡pero esta fue una solución rápida para llegar a donde quería!
fuente