【发布时间】:2009-04-08 05:59:18
【问题描述】:
我正在维护一个遗留的 javascript 应用程序,它的组件被分成 4 个 JS 文件。
它们是“Default.aspx”、“set1.aspx”、“set2.aspx”和“set3.aspx”。 ASPX 页面从属于它们各自集合的多个(所有不同的)源文件中写出压缩的 JS,并将 content-type 标头设置为“text/javascript”。
通过添加对第一个集合的引用并创建主条目对象来调用应用程序。
<script src="/app/default.aspx" type="text/javascript"></script>
<script type="text/javascript>
var ax;
// <body onload="OnLoad()">
function OnLoad() {
ax = new MyApp(document.getElementById("axTargetDiv"));
}
</script>
在第一组脚本(default.aspx)的末尾是以下确切代码:
function Script(src) {
document.write('<script src="' + src + '" type="text/javascript"></script>');
}
Script("set1.aspx?v=" + Settings.Version);
加载第二组脚本 (set1.aspx)。这在所有主要浏览器(IE6-8 Firefox Safari Opera Chrome)中都没有任何错误。
但是,由于我一直在安静地编写这个脚本,所以我想在很多地方简化函数调用并错误地内联上面的 Script 函数,导致以下代码:
document.write('<script src="set1.aspx?v=' + Settings.Version + '" type="text/javascript"></script>');
在使用测试页面进行测试时,现在在所有浏览器中都会引发以下错误:
MyApp is not defined.
这发生在以下行:ax = new MyApp(... 作为 Visual Studio JS 调试器和 Firebug 报告它。
我在发布到此问题的前 4 个答案中尝试了各种方法,但均无济于事。唯一能让 MyApp 成功加载的方法是将实际的“添加脚本”代码放入函数中(即document.write('script') 行):
如果我将document.write 行放在函数中,它可以工作,否则就不行。发生了什么事?
拆分和/或转义脚本文本不起作用。
【问题讨论】:
-
您需要仔细检查包含和评估 javascript 文件的顺序。如果您可以发布文档大纲可能会有所帮助。
-
@Salman A 我今晚会做...有点复杂。
-
修改了整个问题......希望它能让事情更清楚
标签: javascript external-script