Использование jQuery .load разрывает ссылки на другие ресурсы библиотеки? - PullRequest
1 голос
/ 19 ноября 2008

У меня есть простая HTML-страница с div. Я использую jQuery для загрузки содержимого приложения aspx в div «content». Код выглядит так:

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

Проблема в default.aspx использует shadowbox и другие библиотеки javascript. Когда этот код пытается выполнить файл default.aspx, он действует так, как если бы исходные файлы js не были загружены. Я проверяю в firebug и файлы js там (нет 404 или что-нибудь). Кто-нибудь знает, что мне не хватает? Как вы можете видеть, я использовал функцию jQuery noConflict, потому что я думал, что использование $ может конфликтовать с другими библиотеками, но не поможет ...

Ответы [ 3 ]

2 голосов
/ 19 ноября 2008

У меня есть код, делающий это, он может быть более многословным, чем необходимо, но вложенные js-файлы не должны быть проблемой.

jQuery.get('default.aspx', null, function(data) {
    $('#default').append(data);
}, 'html');
1 голос
/ 19 ноября 2008

Является ли код, который не выполняется, визуализированным как блоки скриптов, я понимаю, загруженные библиотеки, но любые блоки скриптов или встроенный javascript не будут выполняться при такой динамической загрузке. Вам нужно найти решение, которое будет оценивать возвращаемые блоки скриптов, чтобы любой из них был действительным. Я посмотрю, смогу ли я выкопать пример из прототипа, я помню, что у него был один.

UPDATE:

Это прямо из прототипа ...

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

Конечно, вы можете упростить это для своих нужд, но когда страница возвращается динамически, вам придется вручную оценивать все сценарии, поскольку браузер не будет автоматически оценивать сценарий, введенный в элемент.

1 голос
/ 19 ноября 2008

Похоже, общая проблема: http://andreineculau.wordpress.com/2006/09/29/ajax-ondemand-javascript-or-dynamic-script-tags/

Я предполагаю, что это безопасность встроена в браузеры для предотвращения запуска произвольного скрипта при ответе ajax.

...