在我的应用程序中,我们有近100多个网页(html页面),并且所有容器都是一个引用我们内部javascript库的脚本。
例如,所有这些文件都加载了这个文件:
http://server/application/map.js
但是,map.js必须与jquery
和openlayers
以及其他内容合作。
将这些依赖项直接添加到100多个页面并不是一个好主意,因为map.js
的实现有一天可能会发生变化。
例如,我们现在使用openlayers
,但有一天我们可能会使用google map
。如果那时,我们必须修改100多个页面,以便从openlaeyrs
更改为google map
。
所以我想知道我是否可以在map.js
?
当然,我可以直接在map.js
中添加脚本:
map.js
((function(){
addScript("jquery");
addScript("openlayers");
function addScript(){
// add a script element to the head of the page
}
})();
但由于js下行时间可能会导致问题。
另类想法?
答案 0 :(得分:1)
jQuery的$.getScript()的工作方式是它只是发送一个ajax get请求,并且基本上使用eval
来加载脚本。因此,如果您想使用普通的旧javascript来执行此操作,您可以使用以下内容:
function addScript(script)
{
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
eval(xmlhttp.responseText);
}
}
xmlhttp.open("GET",script,true);
xmlhttp.send();
}
addScript("path/to/jquery.js");
addScript("yourscript.js");
jQuery使用更好的eval方法(我没有在上面的例子中包含),以防你想将它合并到你的脚本中。
globalEval: function( data ) {
if ( data && jQuery.trim( data ) ) {
// We use execScript on Internet Explorer
// We use an anonymous function so that context is window
// rather than jQuery in Firefox
( window.execScript || function( data ) {
window[ "eval" ].call( window, data );
} )( data );
}
},
this article讨论了在javascript中动态加载脚本的其他一些方法。如果您对我的示例或任何事情有任何疑问,请告诉我们。)
答案 1 :(得分:0)
您需要一个抽象的页眉和页脚,它会自动处理您的所有包含(css,js库)。
在WORST,你应该只在每页添加。
更好的是,所有这些都应该由您正在使用/构建的任何系统自动完成(认为CMS具有shell /模板,至少部分是数据驱动的)。即使你没有系统/ CMS,设置一些非常基本的东西应该是非常简单的。
如果你只想要包含某些文件(作为家属),这取决于内容,甚至更好的理由在一个抽象的页眉/页脚中动态地驱动一些包含。