如何在一个文件中导入javascript依赖项

时间:2013-06-05 06:01:33

标签: javascript

在我的应用程序中,我们有近100多个网页(html页面),并且所有容器都是一个引用我们内部javascript库的脚本。

例如,所有这些文件都加载了这个文件:

http://server/application/map.js

但是,map.js必须与jqueryopenlayers以及其他内容合作。

将这些依赖项直接添加到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下行时间可能会导致问题。

另类想法?

2 个答案:

答案 0 :(得分:1)

jQuery的$.getScript()的工作方式是它只是发送一个ajax get请求,并且基本上使用eval来加载脚本。因此,如果您想使用普通的旧javascript来执行此操作,您可以使用以下内容:

加载脚本的简单旧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方法(我没有在上面的例子中包含),以防你想将它合并到你的脚本中。

jQuery的Eval的Fancier版本:

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,设置一些非常基本的东西应该是非常简单的。

如果你只想要包含某些文件(作为家属),这取决于内容,甚至更好的理由在一个抽象的页眉/页脚中动态地驱动一些包含。