Как использовать Head JS со всеми установленными сценариями?

Я хочу сначала загрузить head js, а затем все вложенные скрипты в его функцию. Вот так…

<script src=">/js/head.load.min.js" type="text/javascript" charset="UTF-8"></script> <script type="text/javascript"> head.js("/path/to/jquery.js", "/google/analytics.js", "/js/site.js", function() { // all done }); </script> 

Как мне это сделать?

Для тех, кто не знает, что HeadJS – это скрипт 2.30KB, который ускоряет, упрощает и модернизирует ваш сайт …

http://headjs.com/

Solutions Collecting From Web of "Как использовать Head JS со всеми установленными сценариями?"

Вам следует предупредить, что не все плагины / темы используют enqueue. Когда я впервые начал обрабатывать все созданные JavaScripts и файлы CSS, я просто подключился к файлам, помещенным в очередь. Это привело к тому, что я получил только 2 из 10 файлов JavaScript и 1 из 3 файлов CSS.

Вот несколько быстрых PoC. Не проверено, а предназначено, чтобы поставить вас в правильном направлении, если вы можете закодировать. Как только я вернусь домой, я соберу что-нибудь более подходящее и функциональное.

 add_action('wp_print_scripts','head_files'); function head_files(){ global $wp_scripts, $auto_compress_scripts; print 'print out head.js'; $queue = $wp_scripts->queue; $wp_scripts->all_deps($queue); $to_do = $wp_scripts->to_do; $headArray = array(); foreach ($to_do as $key => $handle) { $src = $wp_scripts->registered[$handle]->src; $headArray[] = $src; } print 'print out head.js("'.implode("'",$headArray.'")'; } 

(В основном проведите большую часть кода от JS & CSS Script Optimizer )

 add_filter('wpsupercache_buffer', 'head_files' ); function head_files($buffer){ if ( $fileType == "js" ){ preg_match_all('~<script.*(type="["\']text/javascript["\'].*)?src=["\'](.*)["\'].*(type=["\']text/javascript["\'].*)?></script>~iU',$content,$matches); $headArray = $matches[2]; } print 'print out head.js'; print 'print out head.js("'.implode("'",$headArray.'")'; return $buffer; } 

Использование буферизации вывода Super Cache WP.

Вот что я пытаюсь сделать для интеграции head.js:

Я помещаю этот код в свой файл functions.php шаблона

 define('THEME', get_bloginfo('template_url'), true); define('THEME_JS', THEME . '/js/', true); add_action('wp_print_scripts','head_js_files'); function head_js_files() { if (is_admin()) return; //to preserve the admin global $wp_scripts; $in_queue = $wp_scripts->queue; if(!empty($in_queue)) { $scripts = array(); foreach($in_queue as $script) { $src = $wp_scripts->registered[$script]->src; $src = ( (preg_match('/^(http|https)\:\/\//', $src)) ? '' : get_bloginfo('url') ) . $src; $scripts[] = '{' . $script . ':"' . $src . '"}'; } echo "<script type=\"text/javascript\" src=\"".THEME_JS."head.js\"></script>\n"; echo "<script type=\"text/javascript\">head.js(\n". implode(",\n", $scripts). "\n);</script>\n"; } $wp_scripts->queue = array(); } 

Он выводит что-то вроде этого:

 <script type="text/javascript">head.js( {jquery:"/wp-includes/js/jquery/jquery.js"}, {jquery_lastfm:"http://localhost/lucianomammino/wp-content/plugins/lastfm-recent-tracks-widget/js/jquery.lastfm.js"}, {nav:"http://localhost/lucianomammino/wp-content/themes/lmtheme/js/jquery.dropdown.js"} );</script> 

Обратите внимание, что он также использует метку сценария, которая иногда может быть полезна для определения того, какие (и когда) сценарии загружаются.

Вы также можете попробовать этот плагин (или, по крайней мере, посмотреть на код в нем):

http://wordpress.org/extend/plugins/headjs-loader/

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

Вот мое решение для этого. Я использую yepnope вместо head.js, но теория почти такая же.

https://wordpress.stackexchange.com/a/40325/9802

Я надеюсь, что это поможет, и дайте мне знать, если у вас есть комментарии к этой теме.