如何在加载所有脚本时调用函数?

时间:2012-12-13 12:00:23

标签: javascript asp.net-mvc dependency-management

我与客户共享一个脚本标签,以便在客户的网站上部署我的网络应用程序。

基本上,通过这种方式,他可以将我的应用程序嵌入到他的网站上。

我给他的脚本只是在我的MVC应用程序中调用一个动作方法,并接收一个javaScript作为响应。

作为第一步,这个返回的JavaScript在客户端的head标签中插入所有js和css引用(我的应用程序需要)

function createScriptElement(src) {
    var tmp = document.createElement("script");
    tmp.src = src;

    var head = document.getElementsByTagName("head")[0];
    head.appendChild(tmp);
};

然后在第二步中,它将html内容写入一个动态div。

document.write(format("<div id='mycontainer'>{0}</div>{1}", AppHtml,initcalls ));

“initcalls”包含我应用程序的javascript中的初始函数,我希望立即执行。所以我把它放在Script标签中,如下所示。

initcalls的内容是:

<script type=\"text/javascript\">     function icInitApp() { ..... }; </script>

问题是:我的应用程序在js引用上存在一些依赖关系。在客户端页面中的head标记识别并加载js引用之前,HTML已加载。

有没有办法保存我的(因此动态呈现)应用程序的init函数,直到所有js引用都被head标记完全加载?

我尝试用5秒钟给setTimeout(),但它不是客户接受的正确解决方案。

2 个答案:

答案 0 :(得分:1)

下面的链接讨论了类似的情况

How to detect if javascript files are loaded?

您还可以尝试使用$(window).load()事件,因为在页面完全加载时会触发此事件。

$(window).load(function(){
  //your code here
});

PS:请注意,您需要在页面中加载jQuery才能使上述代码正常工作。

答案 1 :(得分:0)

您可以尝试使用jQuery:

$(document).ready(function()){
     // Your code goes here
};