2

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

例如,它们都加载这个文件:

http://server/application/map.js

但是,map.js 必须与jqueryandopenlayers和其他东西一起使用。

而且直接将这些依赖添加到 100+ 页面中也不是一个好主意,因为map.js有一天可能会改变。

例如,我们openlayers现在使用,但我们可能google map有一天会使用。如果那样,我们将不得不修改 100 多页以从 更改openlaeyrsgoogle map

所以我想知道我是否可以在map.js?

当然我可以map.js像这样直接添加脚本:

地图.js

((function(){
   addScript("jquery");
   addScript("openlayers");

   function addScript(){
     // add a script element to the head of the page 
   }
})();

但是由于js下载时间可能会导致问题。

还有其他想法?

4

2 回答 2

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 版本:

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 );
        }
    },

其他方法

本文讨论了其他几种在 javascript 中动态加载脚本的方法。如果您对我的示例或任何内容有任何疑问,请告诉我:)

于 2013-06-05T06:46:49.160 回答
0

您需要一个抽象的页眉和页脚来自动处理所有包含(css、js 库)。

在最坏的情况下,您应该只添加每页的内容。

更好的是,所有这些都应该由您正在使用/已经构建的任何系统自动完成(想想带有外壳/模板的 CMS,至少部分是数据驱动的)。即使您没有系统/CMS,设置一些非常基本的东西也应该很简单。

如果您只希望根据内容包含某些文件(作为依赖项),那么在抽象的页眉/页脚中动态地表驱动某些包含的更好理由。

于 2013-06-05T06:27:11.577 回答