Pergunta

Eu tenho uma página html simples com um div. Eu estou usando jQuery para carregar o conteúdo de um aplicativo aspx no div "conteúdo". olhares código como este:

<!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>

O problema é default.aspx usos shadowbox e outras bibliotecas JavaScript. Quando esse código tenta executar em default.aspx ele age como os js arquivos de origem não foram carregados. I check-in Firebug e os arquivos js estão lá (sem 404 ou qualquer coisa). Alguém sabe o que eu estou perdendo? Como você pode ver que eu usei a função jQuery noConflict porque eu pensei que o uso de US $ poderia estar em conflito com as outras bibliotecas, mas nenhuma ajuda lá ...

Foi útil?

Solução

é o código que não está executando prestado fora como blocos de script, eu entendo as bibliotecas carregadas, mas todos os blocos de script ou javascript em linha não será executado quando carregada dinamicamente assim. Você tem que vir para cima solução witha que irá avaliar os blocos de script devolvido por qualquer de que ele seja válido. Vou ver se eu posso cavar um exemplo do protótipo, eu me lembro-lhes ter um.

UPDATE:

Esta é direto do protótipo ...

  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) });
  }

Claro que você pode simplificar isso para as suas necessidades, mas quando uma página é devolvido dinamicamente você tem que avaliar manualmente todos os scripts como o navegador não irá avaliar roteiro injectada no elemento automagicamente.

Outras dicas

Eu tenho o código fazendo isso, pode ser mais detalhado do que o necessário, mas js aninhados não deve ser um problema.

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

Parece ser um problema comum: http://andreineculau.wordpress.com/2006/09/29/ajax-ondemand-javascript-or-dynamic-script-tags/

Eu estou supondo que é a segurança incorporado navegadores para evitar uma resposta ajax da execução de script arbitrário.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top