动态加载js

171 阅读1分钟

通常,加载哪些js文件都是在开发阶段,预先写好在页面上。但某些场景下需要动态加载js脚本。

像以下这个例子,由于地图页面是个公用的页面,所以应该尽量保持干净和轻量。但好多地方都使用了该地图,我又希望它可以因应不同的情况,按需动态加载不同的脚本,以适应不同的要求。

示例如下:

<div class="main">
    <div class="normal-box map">
    	<!--/* 二维地图页面,存放在一个iframe里 */-->
        <iframe id="frame2D" class="frame" src="about:blank"></iframe>
        <!--/* 三维地图,存放在另一个iframe里 */-->
        <iframe id="frame3D" class="frame hidden" src="about:blank"></iframe>
    </div>
</div>
....
<!--/*
    地图页面加载气泡相关js
    之所以动态加载,是因为气泡相关js不是地图必须依赖,只跟具体业务有关
*/-->
<script th:inline="javascript">
    var timer_map2d = setInterval(function () {
        let doc = document.getElementById("frame2D").contentDocument;
        if(!doc || doc == null) return;//地图页面尚未加载完毕
        clearInterval(timer_map2d);

        var script = doc.createElement("script");
        script.type = "text/javascript";
        script.src = /*[[@{/js/onemap/bubble.js}]]*/"/js/onemap/bubble.js";
        doc.getElementsByTagName("head")[0].appendChild(script);//让地图页面动态加载某js
    }, 1000);
</script>