现在,这个问题已被多次提出并成功回答,但我没有尝试过任何工作。
我试过head.js
& require.js
个库
我也试过了
if (!window.unique_name) {
unique_name = true;
//code here..
}
我无法开展任何工作(全局变量总是未定义)
我试图包含的脚本运行如下:
//clock.js
clockyTick = function() {
//my code here
}
setInterval(clockyTick, 1000);
调用此脚本的应用程序是独立的,工作正常
只有当两个应用程序都包含在同一页面上时(通过调用PHP require()
),它们才会中断。
以下是问题的原因(我认为):
我正在(Joomla)网站上构建自定义网络应用程序,并要求在同一页面上显示我的两个应用程序。
这两个应用程序都需要相同的.js文件才能正常运行,它们在独立运行时工作正常,但只要两个应用程序在同一页面上运行(在管理部分),脚本就会发生冲突并相互阻止工作
(有问题的脚本是一个动态时钟脚本,它抓取div的专用内容并将其修改为其他内容)
我认为我无法让上述库工作的原因是它们也被包含在管理页面上两次。
是否有任何方式,或者我必须咬紧牙关并将库集成到主要的Joomla模板中? (意味着图书馆在每一页上都无用地加载,但仅在数百个中使用) 每个应用程序也需要单独使用jQuery ..但幸运的是我可以使用noConflict来避免问题(不理想)
答案 0 :(得分:1)
joomla的方法是在你的模块中实例化文档,并且在加载模块的脚本之前,只在 之前解释冲突脚本{/ 3}}:
1)获取一个实例,如果是文档对象并删除js文件(你 可以在插件中执行此操作:
<?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);
?>
或者在您的情况下,我认为您可以在js文件中尝试下面的脏解决方案:
//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")
}
这是here
答案 1 :(得分:0)
如果您与PHP require()
有冲突,可以尝试require_once()
。但是,如上所述,这不是Joomla的处理方式。