2012-02-24 3 views
0

Каков наилучший способ задержать весь JavaScript после загрузки jQuery, когда jQuery находится в нижней части страницы? Я уже решил собрать все экземпляры jQuery и инициировать их после загрузки jQuery, но мне нужно найти хороший способ получить все внешние ссылки, сделанные с помощью <script src="file.js"></script>.Лучший способ отправить все скрипты в нижней части страницы, когда есть jQuery в нижней части?

В <head>:

Это захватывает все функции JQuery, найденные на странице, и толкает их в массив.

<script> 
window.q = []; 
window.jQuery = function (f) {q.push(f)}; 
</script> 

Перед </body>:

Просто перед телом, я получаю библиотеку JQuery от Google API с локальным запасным вариантом, а затем запустить каждую функцию JQuery в массиве.

<script> window.jQuery || document.write('<script src=\"Scripts/jquery-1.7.1.js\"><\/script>') 
// after jQuery loaded 
jQuery(function() { 
    jQuery.each(q, function (index, f) { 
     f.call(document); 
    }); 
}); 
</script> 

К вопросу ...

Так что я изначально имел кучу <script> тегов в моем коде. Легкий способ сделать это - просто называть их с помощью jQuery.ajax() и набирать «скрипт», как показано в примере ниже, но я хотел бы изучить возможности для лучших вариантов.

jQuery(function() { 
    jQuery.ajax({ 
     url: "/scripts/somescript.js", // contains myFunction(); 
     cache: true, 
     dataType: "script", 
     success: function() { 
      myFunction(); 
     } 
    }); 
}); 

Примечания:

  • Это будет сделано только для необычных сценариев, которые не используются на каждой странице. Это в контексте виджетов, которые могут быть включены или отключены администратором сайта, поэтому я не совмещаю его с остальной частью общей JS, которую я поставил ниже jQuery на моей главной странице (MVC).

  • Я установил это с помощью html5boilerplate с несколькими модификациями, поэтому на самом деле у меня есть один скрипт в голове, который будет Modernizr 2.0.

Дайте мне знать свои идеи и мысли для улучшения!

Спасибо!

+0

Примечание. Ваш первый метод будет разрушать цепочку jQuery, например: '$ (document) .load (..). unload (...) ' –

ответ

0

Если я верно понял ваш вопрос,

выполнения JavaScript, когда документ будет готов (он же $(document).ready()) только замедляет вниз загрузки страницы, так как браузер выполняет JavaScript, как только он читает его, положить JQuery, как первый <link href...>, а затем все Javascript код, который вы хотите,

обратите внимание, что если Javascript пытается использовать HTML, что это под ним, он не будет работать (так как документ еще загружается, до сих пор загрузки), поэтому поместите его в нужное положение

+0

да, но блокирует. Я ищу неблокирующий подход. – olemarius

+0

http://developer.yahoo.com/performance/rules.html#js_bottom – max4ever