[Решено] JS выполняется два раз

24 ноября 2014 в 10:18

Знаю, что тема изъезжена но все же не могу понять в чем косяк.

В файле template.php подключаю bootstrap.js

function bartik_preprocess_page(&$variables){
  drupal_add_js(drupal_get_path('theme', 'bartik') . '/js/bootstrap.js');
  ...

При админе все ведет себя правильно, а вот при госте по какой-то причине код выполняется два раза.

Есть у кого какие соображения?

Комментарии

Народ, помогите пожалуйста. Реальная проблема. Как победить не понимаю.

Хотя бы подтолкните на какие-нибудь мысли. Плагины разные отключать пробовал, не помогло.

Можно пойти путем и переписать код с использованием костылей (доп. классов), но я ведь библиотеку бутстрап как раз для простоты разработки прикрепил.

27 ноября 2014 в 13:25

На основании какой информации строить предположения?
Какой код 2 раза выполняется?
Логи js-консоли браузера..
Стек вызова функций..
и т.д.

27 ноября 2014 в 15:18

Вводная информация к сожалению только одна.
Это то, что под залогининым пользователем все работает, а под гостем нет.

Конкретно, у меня глючит bootstrap.js, который подключается в файле template.php
А именно при клике на раскрывающие элементы (data-toggle=dropdown) он обрабатывает два клика, вместо одного, и элемент мгновенно закрывается обратно.

Лог js-консоли чист.

Спасибо, что отозвались, сейчас пойду гуглить про стек вызова функций, что это и как узнать.

Но я грешу на кэш. Хотя галочка "Кэшировать страницы для анонимных пользователей" не стоит и объединения js-фалов тоже нет.

27 ноября 2014 в 15:58

Что еще больше запутало, так это то, что на компьютере заказчика все работает.
Проверил на нескольких других компах и в разных браузерах. Все также, под гостем глючит.

Может тут jQueryUpdate замешан? Я его отключал, но не удалял. Никаких изменений не было.

28 ноября 2014 в 11:57

Простите, что опять поднимаю тему. Но все проблема все не решается.

Но нашел ряд странностей.

В тему вставил hook_js_alter. Оказалось, что он исполняется 3 раза.

Еще нашел статью на англ. и вроде как по теме, но что-то до конца понять не могу.
http://drupal.stackexchange.com/questions/23983/drupal-add-js-causes-blo...

1 декабря 2014 в 2:59

Ура!!!
Помог перенос функции drupal_add_js() из хука _preprocess_page в хук _preprocess_html

Если кто знает нюансы такого поведения друпала (про хуки) был бы рад послушать или почитать.

1 декабря 2014 в 3:05

Отвечу про нюансы, которые произошли при таком решении.

В хуке _preprocess_html библиотека bootstrap.js стала подключаться самой последней. Поэтому вызову функций из библиотеки через javascript уже полностью доверять нельзя. Возможно можно их вызывать в конце шаблонов, но я так не делал.

Зато, все стало отлично работать, если вызывать эти функции через атрибуты 'data-target' и др. В документации все написано.

11 декабря 2014 в 16:23