На сегодняшний день, множество веб-разработчиков Joomla использует JavaScript для создания своих веб-сайтов и веб-приложений. Опираясь на удивительные концепции Ajax и Web 2.0, JavaScript стал отличным инструментом для стимуляции новых проектов веб-разработки. Предоставляя основы для объектно-ориентированного программирования (OOP), функции Ajax позволяют работать с различными графическими эффектам, такими как анимации.

Несмотря на все очевидные преимущества JavaScript, важно понимать тот факт, что его многочисленные библиотеки не всегда могут работать вместе. Даже один конфликт между несколькими библиотеками может значительно снизить общую производительность веб-сайта Joomla. А установка большого количества различных расширений, это прямой путь к возникновению таких конфликтов.

Но это не означает, что вы должны перестать использовать модули, плагины и отдельные скрипты для создания своих веб-сайтов и веб-приложений на Joomla. Проблему с совместимостью библиотек можно и нужно решить, о чем и пойдет речь в данной статье.

Устранение проблем с совместимостью JavaScript

Что именно вызывает конфликты JavaScript?

Прежде чем перейти к методам обнаружения конфликтов JavaScript, давайте разберемся с причинами их появления.

Как правило, к подобным проблемам с совместимостью приводит установка модулей и плагинов, использующих разные версии библиотек JQuery или Mootools. Это могут быть различные слайдеры изображений, модули галереи, таймеры, и другие подобные расширения, в которых присутствует анимация.

Но это еще не все, даже в тех ситуациях, когда расширения используют одинаковые версии jQuery или Mootools, эти библиотеки могут конфликтовать между собой. Это же касается и пользовательских скриптов, которые вы вручную добавляете на страницы сайта. Они могут быть несовместимы как со встроенными библиотеками Joomla, так и с отдельными модулями.

Методы обнаружения конфликтов JavaScript

Обнаружить наличие конфликтующих скриптов на сайте Joomla достаточно просто. Все зависит от используемого браузера. Например, если это Google Chrome, то вам нужно открыть панель инструментов разработчика, нажав на клавиатуре F12, и перейти во вкладку «Консоль».

Обнаружение конфликтующих скриптов на сайте Joomla

Если на вашем сайте будет конфликт одной из библиотек JavaScript, то в консоли отобразится соответствующее сообщение об ошибке. Это сообщение будет содержать некоторую информацию о функции, вызывающей ошибку, а также указание о ее местонахождении в файлах сайта.

Обнаружение конфликтующих скриптов Joomla

Если данный код вам ни о чем не говорит, то вы можете выяснить опытным путем, какое из расширений является причиной возникновения ошибок совместимости. Для этого, вам нужно сделать следующее:

  1. Переключиться в Joomla на шаблон по умолчанию;
  2. Отключить все установленные расширения;
  3. Обновить страницу сайта в браузере, чтобы проверить, пропала ли ошибка;
  4. Если ошибка пропала, то включать расширения по одному и обновлять сайт, пока она снова не появится;
  5. Повторяйте процесс, пока не обнаружите расширение, вызывающее ошибку.

Возможные способы устранения конфликтов JavaScript

Несмотря на то, что универсальной методики устранения ошибок совместимости скриптов не существует, есть один действенный способ, который можно попробовать для решения этой проблемы.

Запуск jQuery в режиме «no-conflict»

Возникновение любых конфликтов JavaScript можно предотвратить, если перед их загрузкой включить режим «no-conflict». Чтобы это сделать, нужно поместить функцию jQuery.noConflict() перед загрузкой проблемного скрипта. На примере пользовательского скрипта это выглядит так:

jQuery код:
  1. <!-- Простой скрипт jQuery в режиме no-conflict. -->
  2. <script src="jquery.js"></script>
  3. <script>
  4. jQuery.noConflict();
  5. jQuery (function($) {
  6. // Содержимое скрипта…
  7. });
  8. </script>

С пользовательским скриптом все более-менее просто, но как быть со сторонним расширением Joomla, имеющим проблемы с совместимостью? Чтобы исправить его, вам нужно будет вызвать функцию jQuery.noConflict() перед загрузкой конфликтующего расширения.

Если это модуль, то вам нужно найти файл, в котором формируется его вывод на страницах сайта. Как правило, этот файл находится в каталоге вашего сайта, по пути «modules/mod_название модуля/tmpl/». В этом файле, после подключения библиотеки jQuery, вам нужно вставить следующую строку:

jQuery код:
  1. <script type="text/javascript">
  2. jQuery.noConflict();
  3. </script>

Кроме того, в файле самого скрипта, который находится в папке «js», вам нужно будет найти такую строку:

$(function(){

И заменить ее на это:

jQuery (function($){

В большинстве случаев, это поможет избавиться от конфликта JavaScript, но нужно понимать, что разные разработчики расширений пишут код по-своему. Поэтому, в некоторых случаях, папки «tmpl» может просто не быть, а в других, искомая строка будет выглядеть иначе. Тогда вам придется либо искать все это в других папках и файлах, либо обратиться к специалистам.

Установка плагина для устранения конфликтов

Если вы не можете исправить проблему совместимости скриптов в Joomla самостоятельно, то вы можете попробовать воспользоваться специальным плагином, таки как jQuery Easy. Этот плагин автоматически расставляет правильную очередность загрузки библиотек jQuery, а также добавляет функцию noConflict() перед их вызовом. В некоторых случаях он действительно может помочь, но это происходит далеко не всегда.

Заключение

Избавиться от проблем с одинаковыми библиотеками JavaScript не так уж сложно, если понимать хотя бы основы веб-программирования. В противном случае, лучше всего будет обратиться к специалистам, иначе есть вероятность сделать только хуже. В интернете можно найти множество профильных форумов, где люди помогают решать подобные проблемы.


 
4.593625498008 1 1 1 1 1 (Оценок: 251)
4.593625498008 251
Опубликовано: 21-05-2016

Комментарии  

Krasheninin
+1 #2 Krasheninin 26.02.2020 23:08
Благодарю! Помог решить проблему. главное, не забыть изменить $(function(){ на jQuery (function($){. Все пашет.
Наташа Цой
0 #1 Наташа Цой 25.05.2016 11:21
Большое спасибо за статью! Только начала изучать Joomla и ваша статья была для меня крайне полезной. Как раз на днях столкнулась с подобной проблемой, попробую последовать вашим советам.

Вы не зарегистрированы, чтобы оставлять комментарии.