我正在维护一个遗留的 javascript 应用程序,它的组件分为 4 个 JS 文件。
它们是“Default.aspx”、“set1.aspx”、“set2.aspx”和“set3.aspx”。ASPX 页面从属于它们各自集合的多个(所有不同的)源文件中写出压缩的 JS,并将内容类型标头设置为“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
条线放在一个函数中,它就可以工作,否则就不行。发生了什么?
拆分和/或转义脚本文本不起作用。