在Joomla中只包含一次javascript文件
现在,这个问题已经被成功地问了很多次了,但我尝试的事情都没有成功 我尝试了在Joomla中只包含一次javascript文件,javascript,jquery,joomla,Javascript,Jquery,Joomla,现在,这个问题已经被成功地问了很多次了,但我尝试的事情都没有成功 我尝试了head.js和require.js库 我也尝试过 if(!window.unique_name){ 唯一_name=true; //代码在这里。。 } 所有这些我都无法使用(全局变量始终未定义) 我试图包含的脚本运行如下: //clock.js clockyTick=函数(){ //我的代码在这里 } 设置间隔(时钟频率,1000); 调用此脚本的独立应用程序工作正常。 只有当两个应用程序都包含在同一页面上时(通过调
head.js
和require.js
库
我也尝试过if(!window.unique_name){
唯一_name=true;
//代码在这里。。
}
所有这些我都无法使用(全局变量始终未定义)我试图包含的脚本运行如下:
//clock.js
clockyTick=函数(){
//我的代码在这里
}
设置间隔(时钟频率,1000);
调用此脚本的独立应用程序工作正常。只有当两个应用程序都包含在同一页面上时(通过调用PHP
require()
),它们才会中断
以下是问题的原因(我认为):我正在(Joomla)网站上构建自定义web应用程序,需要在同一页面上显示我的两个应用程序。
两个应用程序都需要相同的.js文件才能正确运行,这在它们独立运行时可以正常工作,但一旦两个应用程序在同一页面(在“管理”部分)上运行,脚本就会发生冲突并停止彼此的工作
(所讨论的脚本是一个动态时钟脚本,它获取div的专门内容并将其修改为其他内容) 我认为我无法让上述库正常工作的原因是,它们在管理页面上也被包含了两次 有没有办法解决这个问题,或者我必须咬紧牙关,将一个库集成到主Joomla模板中?(这意味着该库在每一页上都被无用地加载,但仅在数百页中的3页上使用)
jQuery在每个应用程序上都是单独需要的。但谢天谢地,我能够使用noConflict来避免出现问题(不理想)joomla的方法是在加载模块脚本之前,实例化模块内的文档,并仅取消设置此问题中描述的冲突脚本: 1) 获取一个实例,如果该文档是对象并删除js文件(您 可以在插件中执行此操作):
这里有一个如果您与PHP
require()
发生冲突,您可以尝试require\u once()
。然而,正如前面提到的,这不是Joomla做事的方式 谢谢你对joomla的具体回答,我会试一试的。至于您建议的“脏”解决方案,我提到我确实尝试过,但出于任何原因,窗口.globalvar
没有设置。我可以补充一点,我在加载两次时遇到问题的脚本是我自己的,而不是Joomla脚本,因此,只有在页面中包含了PHP require()之后,它才会出现在页面上代码>代码片段更新:仍然不知道是什么或如何更新,但在尝试了所有操作后,包括使用PHP echo()
,并在加载脚本的每个页面上检查和设置全局PHP变量标志。。。我最后一次尝试了“肮脏”的方法,现在它起作用了!!!于是接受了你的回答:)谢谢你的努力@罗兹:太好了!为便于将来参考,js和css文件应如图所示包含在内,以便您可以如上所述取消设置它们。多亏了这个额外的snippit,这可能是我所缺少的。自从这个问题提出以来,我已经走了很长一段路&几乎放弃了“joomla方法”require\u once
对于防止意外的东西重叠非常有用,但对我来说根本没有帮助——对代码布局的重新思考解决了所有问题。
<?php
//get the array containing all the script declarations
$document = JFactory::getDocument();
$headData = $document->getHeadData();
$scripts = $headData['scripts'];
//remove your script, i.e. mootools
unset($scripts['/media/system/js/mootools-core.js']);
unset($scripts['/media/system/js/mootools-more.js']);
$headData['scripts'] = $scripts;
$document->setHeadData($headData);
?>
//1st module script
var unique_name;
if (unique_name == false || unique_name == null) {
unique_name = true;
//code here..
alert("Included 1st script");
}else{
//do nothing
alert("Not included 1st script")
}
//2nd module script
var unique_name;
if (unique_name == false || unique_name == null) {
unique_name = true;
//code here..
alert("Included 2nd script");
}else{
//do nothing
alert("Not included 2nd script")
}