Цитата:
Цитата:
Цитата:
попробуй достать до <body> из <head>, если они исполняются асинхронно. Парсер HTML приостанавливается, когда встречает <script>. Продолжает работу, когда <script> пропарсен. твой первый пример полностью подтверждает это :) <html> <head> <script> try { alert( 'document.getElementsByTagName("body").length: ' + document.getElementsByTagName("body").length ); } catch (e) { alert( 'ошибка при доступе к document.getElementsByTagName("body").length \n\n\t' + e.message ); } </script> </head> <body>Должен быть алерт</body> </html> асинхронно (не задерживая парсер HTML) скрипты загружаются, если их пометить атрибутом async (в старых IE называется defer). Но это не даёт никаких гарантий, что этот асинхронный скрипт будет работать после парсинга дерева. Cори за оффтоп. |
Цитата:
Но я вновь ошибся. Если вставлять скрипт даже синхронно, через document.write, то конечно же он исполнится только когда текущий скрипт отработает. Я просто запутался. Есть еще вариант вставки через appendChild инлайн-скрипта. Так вот он отработает незамедлительно, прям в момент вставки. Вставка через appendChild, не сработает, так как это внешний скрипт, вставленный юзером (отрабатывает всегда асинхронно). <script> var script = document.createElement('script'); script.src = 'data:application/javascript,function%09fn(){alert("ok")}'; document.head.appendChild(script); </script> <script> fn(); </script> Вставка через document.write, сработает, так как скрипт будет разобран парсером сразу же и отправлен на выполнение. <script> var script = document.createElement('script'); script.src = 'data:application/javascript,function%09fn(){alert("ok")}'; document.write('<script src=\'data:application/javascript,function%09fn(){alert("ok")}\'><\/script>'); </script> <script> fn(); </script> Сработает, чем-то похоже на eval. <script> var script = document.createElement('script'); script.innerText = 'function fn() {alert("ok")}'; document.head.appendChild(script); fn(); </script> |
Цитата:
Цитата:
|
Цитата:
$id_sfx = rand(1,100) . rand(1,100);, ну и вообще хардкод фигачить не тру. Попробовал подключить файл с заголовками - пишет ошибку как только доходит до первой php-вставки <?php header('Content-type: text/javascript; charset: UTF-8'); header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 2592000) . ' GMT'); header('Last-Modified: '.gmdate('D, d M Y H:i:s',filemtime(__FILE__)).' GMT'); ?> (function($) { $(document).ready(function() { if (!$(document).bxSlider) { var script = document.createElement("script"); script.type = "text/javascript"; script.src = "<?php echo JURI::root() ?>/modules/mod_ext_jshopping_slider_products/assets/js/jquery.bxSlider.min.js"; // тут ошибка Unexpected token ILLEGAL |
Цитата:
я не зря так написал, потому как сталкивался на разных серверах с разными настройками данная строка может быть причиной ошибки а это доки http://tools.ietf.org/html/rfc2616#section-14.3 |
Цитата:
![]() похоже что да, асинхронно. странно, почему при document.write он не отправляется на "загрузку". наверное, связано с механизом парсинга и нужно неплохо знать всё это дело, чтобы разобраться. |
Цитата:
var id_sfx = Math.random() * 10000; можно заменить |
Цитата:
<ul class="slider__list" id="slider__list_<?php echo $id_sfx; ?>"> <?php foreach($last_prod as $curr){ ?> <li> //... |
Danxil,
это генератор случайных чисел, используй себе на php свой на js cвой они генерируют разные значения и уже попахивает на г-код ибо незачем добавлять каждый раз свой ид. В модулях Joomla для разделения мух от котлет, достаточно было добавляеть ид модуля $module->id |
Цитата:
<ul class="slider__list" id="slider__list_<?php echo $id_sfx; ?>"> <?php foreach($last_prod as $curr){ ?> <li> //... $("#slider__list_<?php echo $id_sfx ?>").bxSlider(); т.е. если модуль без id и используется, например, в двух местах на странице, т.е. $(".slider__list_").bxSlider(); вызывается 2 раза, то при первом вызове слайдер создастся в двух родителях .slider__list_ и и при втором вызове слайдер снова создастся в тех же родителях, а с id каждый раз будет создаватся только в нужном элементе. Про $module->id не понял, можно поподробнее ? |
Часовой пояс GMT +3, время: 09:34. |