module_init()中的drupal_add_js() - 是否可以在所有模块中加载JS库?

时间:2012-01-31 18:02:38

标签: javascript drupal-6

当在module_init()函数中调用drupal_add_js()时,加载的JS库是否具有关于其他模块对库的访问的全局存在?

示例:

假设有两个模块 - 每个模块需要一个JS库,并且两个JS库都具有相同的名称。 JS库存在于各自的模块目录中。虽然两个JS库的名称相同,但它们的内容不同,因此每个模块都不能使用其他模块的JS库 - 这样做会导致模块失败。

因此, IF 实际上,JS库按照上述方法加载了全局存在。加载第一个模块后,其JS库将全局应用于所有模块。接下来,加载第二个模块,其JS库将全局应用于所有模块。在此阶段,两个模块都处于活动状态。由于JS库的名称相同,第二个模块的JS库将有效地替换第一个模块的JS库,从而导致第一个模块失败。

谢谢!

1 个答案:

答案 0 :(得分:1)

模块添加了drupal_add_js()的JavaScript代码被添加到页面中,添加到页面的JavaScript代码列表是一个,每个模块都是全局的。这意味着从模块添加的JavaScript代码对每个模块都是可见的。

实际上,该列表包含在drupal_add_js()使用的静态变量中,并且使用以下代码将JavaScript代码添加到page.tpl.php文件中的页面:

  <?php print $styles; ?>
  <?php print $scripts; ?>
使用以下代码在template_preprocess_page()中初始化

$scripts,该代码返回一个字符串,其中包含用于基于该静态变量内容的<script>标记的HTML。

  $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>标记。