drupal_add_js () в module_init () - Будет ли библиотека JS загружена во все модули? - PullRequest
1 голос
/ 31 января 2012

Когда drupal_add_js () вызывается в функции module_init (), будет ли загруженная библиотека JS иметь глобальное присутствие в отношении доступа к библиотеке другими модулями?

Пример:

Давайтескажем, что есть два модуля - каждый требует одну библиотеку JS, и обе библиотеки JS имеют одинаковые имена.Библиотеки JS существуют в соответствующих каталогах модулей.Хотя обе библиотеки JS имеют одинаковые имена, их содержимое отличается тем, что каждый модуль не может использовать библиотеку JS другого модуля - это приведет к сбою модуля.

Таким образом, возникнет проблема IF фактически библиотеки JS загружаются глобально, следуя вышеуказанному методу.Когда первый модуль загружен, его библиотека JS будет применена глобально ко всем модулям.Затем загружается второй модуль, и его библиотека JS будет применяться глобально ко всем модулям.На этом этапе оба модуля активны.Поскольку библиотеки JS имеют одинаковые имена, библиотека JS второго модуля фактически заменит библиотеку JS первого модуля, что приведет к сбою первого модуля.

Спасибо!

1 Ответ

1 голос
/ 31 января 2012

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

Фактически этот список содержится в статической переменной, используемой drupal_add_js(), и код JavaScript добавляется на страницу в файле page.tpl.php с использованием следующего кода:

  <?php print $styles; ?>
  <?php print $scripts; ?>

$scripts инициализируется в template_preprocess_page () со следующим кодом, который возвращает строку, содержащую HTML-код для использования для тегов <script>, на основе содержимого этой статической переменной.

  $variables['styles']            = drupal_get_css();
  $variables['scripts']           = drupal_get_js();

Если, например, два модуля вызывают функцию с drupal_add_js(drupal_get_path('module', 'first_module') . '/jquery_plugin_tree') и drupal_add_js(drupal_get_path('module', 'second_module') . '/jquery_plugin_tree'), то страница будет содержать два тега <script>, которые указывают на два файла, даже если содержимое файла одинаково в обоих случаи.

В случае, если два модуля используют один и тот же путь для файла JavaScript, тогда будет добавлен только тег <script>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...