当在module_init()函数中调用drupal_add_js()时,加载的JS库是否具有关于其他模块对库的访问的全局存在?
示例:
假设有两个模块 - 每个模块需要一个JS库,并且两个JS库都具有相同的名称。 JS库存在于各自的模块目录中。虽然两个JS库的名称相同,但它们的内容不同,因此每个模块都不能使用其他模块的JS库 - 这样做会导致模块失败。
因此, IF 实际上,JS库按照上述方法加载了全局存在。加载第一个模块后,其JS库将全局应用于所有模块。接下来,加载第二个模块,其JS库将全局应用于所有模块。在此阶段,两个模块都处于活动状态。由于JS库的名称相同,第二个模块的JS库将有效地替换第一个模块的JS库,从而导致第一个模块失败。
谢谢!
答案 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>
标记。