• DONATE to NULLED!
    Форуму и его команде можно помочь, мотивировать модераторов разделов.
    Помогите модератору этого раздела wpt лично.

Помощь После объединения JS файлов в Bitrix – скрипты перестают работать, Как победить?

Voland700

Создатель
Регистрация
16 Дек 2013
Сообщения
53
Реакции
4
В целях сжатия и объединения скриптов в Админке в настройках главного модуля - отмечаю пункт - Объединять JS файлы, после чего JS скрипты перестают работать. До объединения все работает.

Кто сталкивался? Прошу совета - как поправить?

В консоли браузера после объединения появились ошибки:
Для просмотра ссылки Войди или Зарегистрируйся
 
скрипт, в котором идет вызов функции подключается раньше, чем скрипт в котором эта самая функция.
Какой шаблон? Каким макаром jquery подключен?
А самая первая строчка говорит о том что файл не найден. Может кэш?
 
  • Нравится
Реакции: nyx
скрипт, в котором идет вызов функции подключается раньше, чем скрипт в котором эта самая функция.
Какой шаблон? Каким макаром jquery подключен?
А самая первая строчка говорит о том что файл не найден. Может кэш?

Шаблон сверстан и натянут на Битрикс.
JQuery - 3, последняя стабильная, требуется для свежей галерей fancybox.
Скрипты в основном подключаются как обычно:
Код:
    $APPLICATION->ShowHead();
    use Bitrix\Main\Page\Asset;
    Asset::getInstance()->addString("<meta http-equiv='X-UA-Compatible' content='IE=edge'>");
    Asset::getInstance()->addString("<meta name='viewport' content='width=device-width, initial-scale=1'>");
    Asset::getInstance()->addString("<meta name='theme-color' content='#4f5a6c'>");
    Asset::getInstance()->addString("<link rel='icon' href='".SITE_TEMPLATE_PATH ."/img/favicon/favicon.ico'>");
    Asset::getInstance()->addString("<link rel='apple-touch-icon' sizes='180x180' href='".SITE_TEMPLATE_PATH ."/img/favicon/apple-touch-icon-180x180.png'>");
    Asset::getInstance()->addString("<link rel='shortcut icon' href='".SITE_TEMPLATE_PATH ."/img/favicon/favicon.ico' />");
    Asset::getInstance()->addString("<meta name='viewport' content='width=device-width, initial-scale=1'>");
    Asset::getInstance()->addJs(SITE_TEMPLATE_PATH.'/libs/jquery/jquery.min.js');
    Asset::getInstance()->addJs(SITE_TEMPLATE_PATH.'/js/myjs/jquery.fancybox.min.js');
    Asset::getInstance()->addJs(SITE_TEMPLATE_PATH.'/js/myjs/sweetalert2.all.min.js');
    Asset::getInstance()->addJs('/callme/js/callme.js');   
    Asset::getInstance()->addJs(SITE_TEMPLATE_PATH.'/js/myjs/common.js');

- Так же, некоторые скрипты подключаются из JS фалов шаблонов компонентов.

А самая первая строчка понятно, что говорит о не найденном файле - /catalog/pechi-jotul/undefinedjs/config.js?_=1535544052809, но до объединения скриптов данная проблемы не было. Кеш чистил, кеширование пробовал отключать - не помогает.
 
Вычисляйте, где нарушается порядок следования блоков <script>..</script> или подключаемых файлов <script src=".."></script> при переносе/объединении, потом для нужного блока или файла добавьте запрет на его перенос с помощью параметра data-skip-moving="true", этот блок или файл переноситься/объединяться не будут
Код:
<script data-skip-moving="true">..</script>
<script data-skip-moving="true" src=".."></script>
 
Последнее редактирование:
Благодарю за совет. Но проблема похоже в другом.
Скрипты подключаются в порядке указанном в header.php шаблона, и затем подключаются из JS фалов шаблонов компонентов.
На первый взгляд порядок не нарушен, скрипты следуют в том же порядке что и в не объединённой версии. Добился работы JS в браузерах Windows и устройствах Андроид,
но на устройствах IOS (iPad, iPhone) - JS на сайте не работает по прежнему.

В чем еще может быть причина?
 
А самая первая строчка понятно, что говорит о не найденном файле - /catalog/pechi-jotul/undefinedjs/config.js?_=1535544052809, но до объединения скриптов данная проблемы не было. Кеш чистил, кеширование пробовал отключать - не помогает.
А физически этот файл есть на диске?

Добился работы JS в браузерах Windows и устройствах Андроид,
но на устройствах IOS (iPad, iPhone) - JS на сайте не работает по прежнему.
Поменяйте в браузере user-agent на яблочные и загрузите сайт, посмотрите в консоль.
Может быть банально, если с этих устройств уже заходили на сайт до фикса - почистить кеш браузера (настройки, личные данные, удалить временные файлы - или что-то такое).
 
А физически этот файл есть на диске?
Нет, нет такого файла по адресу - /catalog/pechi-jotul/undefinedjs/config.js?_=1535544052809, это что то цепляется к адресу элемента каталога, который динамически формируется, физически на сайте отсутсвует.

Поменяйте в браузере user-agent на яблочные и загрузите сайт, посмотрите в консоль.
Может быть банально, если с этих устройств уже заходили на сайт до фикса - почистить кеш браузера (настройки, личные данные, удалить временные файлы - или что-то такое).

Да нет, кеш браузера точно не причем. Ситуция такова: отключаю объединение скриптов, все работает, и на устройсвах IOS, в консоле ошибок нет. После того как включаю Объединять JS файлы, на IOS скрипты перестают работать, на других устройствах работают, приэтом в консоле появляютя ошибки.
 
у меня есть устройство с ios 11.3.1, дайте ссылку, можно приватно я посмотрю как выглядит.
 
У вас в header
Код:
<script  data-skip-moving="true">(function(w, d, n) {var cl = "bx-core";var ht = d.documentElement;var htc = ht ? ht.className : undefined;if (htc === undefined || htc.indexOf(cl) !== -1){return;}var ua = n.userAgent;if (/(iPad;)|(iPhone;)/i.test(ua)){cl += " bx-ios";}else if (/Android/i.test(ua)){cl += " bx-android";}cl += (/(ipad|iphone|android|mobile|touch)/i.test(ua) ? " bx-touch" : " bx-no-touch");cl += w.devicePixelRatio && w.devicePixelRatio >= 2? " bx-retina": " bx-no-retina";var ieVersion = -1;if (/AppleWebKit/.test(ua)){cl += " bx-chrome";}else if ((ieVersion = getIeVersion()) > 0){cl += " bx-ie bx-ie" + ieVersion;if (ieVersion > 7 && ieVersion < 10 && !isDoctype()){cl += " bx-quirks";}}else if (/Opera/.test(ua)){cl += " bx-opera";}else if (/Gecko/.test(ua)){cl += " bx-firefox";}if (/Macintosh/i.test(ua)){cl += " bx-mac";}ht.className = htc ? htc + " " + cl : cl;function isDoctype(){if (d.compatMode){return d.compatMode == "CSS1Compat";}return d.documentElement && d.documentElement.clientHeight;}function getIeVersion(){if (/Opera/i.test(ua) || /Webkit/i.test(ua) || /Firefox/i.test(ua) || /Chrome/i.test(ua)){return -1;}var rv = -1;if (!!(w.MSStream) && !(w.ActiveXObject) && ("ActiveXObject" in w)){rv = 11;}else if (!!d.documentMode && d.documentMode >= 10){rv = 10;}else if (!!d.documentMode && d.documentMode >= 9){rv = 9;}else if (d.attachEvent && !/Opera/.test(ua)){rv = 8;}if (rv == -1 || rv == 8){var re;if (n.appName == "Microsoft Internet Explorer"){re = new RegExp("MSIE ([0-9]+[\.0-9]*)");if (re.exec(ua) != null){rv = parseFloat(RegExp.$1);}}else if (n.appName == "Netscape"){rv = 11;re = new RegExp("Trident/.*rv:([0-9]+[\.0-9]*)");if (re.exec(ua) != null){rv = parseFloat(RegExp.$1);}}}return rv;}})(window, document, navigator);</script>
на 9 строке выполняется скрипт. Сам же jquery подключается на 1954 строке.
Скорее всего проблема связана с этим.
Вам нужно выполнять эти функции после подключения jquery.
 
У вас в header
на 9 строке выполняется скрипт. Сам же jquery подключается на 1954 строке.
Скорее всего проблема связана с этим.
Вам нужно выполнять эти функции после подключения jquery.

Благодарю, но похоже проблемма похоже в другом.
В не объединеной версии, JS файлы подключаются в том же порядке внизу страницы, a указанный код так же подключается первым в header, при этом все работает.
Да и похоже написан указанный выше код на нативном JS, его работа не зависит от библиотеки jQuery.
 
Назад
Сверху