Pregunta

Tengo una página html simple con un div. Estoy usando jQuery para cargar el contenido de una aplicación aspx en el "contenido". div. El código se ve así:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
                "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js">
    </script>
    <script type="text/javascript">
        jQuery.noConflict();
    </script>
</head>
<body>
    <div id="content">
        <div id="loading"> 
            <div class="loading-indicator">Loading...</div>
        </div>
    </div>
</body>
<script type="text/javascript">
    jQuery(document).ready(function() {
        jQuery("#content").load("default.aspx");
    });
</script>
</html>

El problema es default.aspx usa shadowbox y otras bibliotecas javascript. Cuando ese código intenta ejecutarse en default.aspx, actúa como si no se hubieran cargado los archivos fuente js. Verifico Firebug y los archivos js están allí (no 404 ni nada). Alguien sabe lo que me estoy perdiendo? Como puede ver, usé la función jQuery noConflict porque pensé que el uso de $ podría estar en conflicto con las otras bibliotecas, pero no hay ayuda allí ...

¿Fue útil?

Solución

Es el código que no se está ejecutando representado como bloques de script, entiendo las bibliotecas cargadas, pero los bloques de script o javascript en línea no se ejecutarán cuando se cargue dinámicamente de esa manera. Debe encontrar una solución que evalúe los bloques de script devueltos para que cualquiera de ellos sea válido. Veré si puedo cavar un ejemplo del prototipo, recuerdo que tenían uno.

ACTUALIZACIÓN:

Esto es directamente del prototipo ...

  ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script>'

  extractScripts: function() {
    var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
    var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
    return (this.match(matchAll) || []).map(function(scriptTag) {
      return (scriptTag.match(matchOne) || ['', ''])[1];
    });
  }

  evalScripts: function() {
    return this.extractScripts().map(function(script) { return eval(script) });
  }

Por supuesto, puede simplificar eso para sus necesidades, pero cuando una página se devuelve dinámicamente, debe evaluar manualmente todas las secuencias de comandos, ya que el navegador no evaluará las secuencias de comandos inyectadas en el elemento automáticamente.

Otros consejos

Tengo un código que hace esto, puede ser más detallado de lo necesario, pero los archivos js anidados no deberían ser un problema.

jQuery.get('default.aspx', null, function(data) {
    $('#default').append(data);
}, 'html');

Parece un problema común: http://andreineculau.wordpress.com/2006/09/29/ajax-ondemand-javascript-or-dynamic-script-tags/

Supongo que es seguridad incorporada en los navegadores para evitar que una respuesta ajax ejecute un script arbitrario.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top