从另一个文件包含的文件运行javascript函数

从另一个文件包含的文件运行javascript函数,javascript,Javascript,我们使用document.write在另一个javascript文件中包含一个javascript文件。在第一个javascript文件中是对第二个javascript文件中的函数的调用。因此,我们收到一条错误消息:“gMunchkin”在调试代码时未定义。我做错了什么?怎么能这样称呼“Gmunchin” 我使用IE7查看演示:很可能在您调用mktoMunchkin()时,浏览器还没有下载完munchkin.js 您可以使用muchkin.js $.getScript('http://munch

我们使用document.write在另一个javascript文件中包含一个javascript文件。在第一个javascript文件中是对第二个javascript文件中的函数的调用。因此,我们收到一条错误消息:“gMunchkin”在调试代码时未定义。我做错了什么?怎么能这样称呼“Gmunchin”


我使用IE7查看演示:

很可能在您调用mktoMunchkin()时,浏览器还没有下载完munchkin.js

您可以使用muchkin.js

$.getScript('http://munchkin.marketo.net/munchkin.js', function() {
     //The code inside this anonymous function is executed by $.getScript() when the script has finished 
     //downloading.It is called a Callback function. It is required because 
     //getScript() does not block and will return before the javascript file is 
     //downloaded by the client
     //If the call to getScript was blocking, the client would be frozen until the 
     //js file was downloaded, which could be seconds and could lead the user 
     //to think the browser has crashed
     alert('Muchkin loaded. We can now use the Munchkin library.');
     mktoMunchkin("476-IFP-265");
});
//any code placed here will execute immediately. When this code is executed,
// munchkin.js may not have finished downloading. Hopefully you can see why 
//there is a need for the callback function in $.getScript().

这样,您就可以保证在尝试使用munchkin.js的功能之前,它已被完全下载。

当您使用
document.write
包含另一个脚本时,您的主脚本将继续执行,甚至在另一个脚本实际被获取和包含之前。也就是说,
document.write
也不受欢迎,您不应该出于任何目的使用它


有什么原因不能直接将
标记添加到HTML中吗?

您可以让父页面执行类似的操作

var doAllThisStuff = function() {
    mktoMunchkin();
};
var stillNeedToDoThis = null;
if (typeof mktoMunchkin == "function") {
    doAllThisStuff(); // Yay, we can do it right away!
} else {
    stillNeedToDoThis = doAllThisStuff; // We don't have mktoMunchkin yet. Better wait.
}
然后在新页面的底部做如下操作

function mktoMunchkin() {
    // All kinds of code
}
if (typeof stillNeedToDoThis == "function") { // is anybody waiting for mktoMunchkin?
    stillNeedToDoThis();
    stillNeedToDoThis = null;
}

我编写了一个真正的异步接口,无论Munchkin js是否已完成加载,都可以使用它-

“我用IE7看到了”我猜你是想在这条线上多加一些。关于演示,在Ubuntu上使用Chrome时,我看到两个警报,“a”和“b”。你应该在你的问题中指出你期望看到什么,以及你正在看到什么。我不确定如何最好地修改标题,但我建议…一些…我认为这是一篇垃圾帖子:P Evan,在做任何事情之前,你在听一个加载事件吗?它不会解决您所有的问题,但您只需等待文档完全加载,然后再调用部分下载的js文件就足够了。我希望编辑会让它更清晰!)嗨-我更新的代码有点不同,但我仍然得到另一个错误。apus.edu/bin/r/u/test.htmHi-我对代码进行了稍微不同的更新,但仍然出现另一个错误。你仍然会有同样的问题。将脚本添加到页面时,客户端仍然需要从服务器下载文件。这可能需要1千万秒到10秒的时间!我上面提供的解决方案将起作用。函数()中的代码{}只有在客户端下载完javascript文件后才会执行。Evan,我还在回答中的代码片段中添加了一些额外的注释。希望这能帮助您理解为什么需要$.getScript()方法。如果您还没有jQuery,可以在这里下载:Jamie-谢谢您提供的详细信息!我已经做了你建议的调整。另外,是否可以在vendor.js文件中包含jquery库?我们正在尝试在vendor.js文件中获取所有库。我将库放在页面上,这次在IE7中查看时,例如,错误消息说:“对象不支持此属性或方法”单击此链接以查看新的更改:我认为我们正在接近……您不能将jQuery包含在vendor.js文件中,因为这样getScript方法将不可用。IE7正在报告的错误在munchkin.js中,因此您需要与编写该错误的人讨论其原因,或者检查是否有其他人报告了该错误。另外,munckin.js包含jQuery和sizzle(jQuery选择器库)代码,这很奇怪,我不同意。