当前位置:  开发笔记 > 编程语言 > 正文

Javascript外部脚本加载陌生感

如何解决《Javascript外部脚本加载陌生感》经验,为你挑选了1个好方法。

我正在维护一个遗留的javascript应用程序,它的组件分为4个JS文件.

它们是"Default.aspx","set1.aspx","set2.aspx"和"set3.aspx".ASPX页面从属于其各自集合的多个(所有不同的)源文件中写出压缩的JS,并将内容类型标题设置为"text/javascript".

通过添加对第一个集的引用并创建主条目对象来调用该应用程序.




在第一组脚本(default.aspx)的末尾是以下完全代码:

function Script(src) {
    document.write('');
}

Script("set1.aspx?v=" + Settings.Version);

它加载第二组脚本(set1.aspx).这在所有主流浏览器(IE6-8 Firefox Safari Opera Chrome)中都没有任何错误.

但是,由于我一直在使用这个脚本安静,我想在很多地方简化函数调用并错误地内联上面的Script函数,从而得到以下代码:

document.write('');

在使用测试页面进行测试时,现在会在所有浏览器中抛出以下错误:

MyApp is not defined.

这发生在这一行:ax = new MyApp(...Visual Studio JS调试器 Firebug报告它.

我已经尝试了在这个问题的前4个答案中的各种方法无济于事.只有将实际的"添加脚本"代码放在一个函数(即document.write('script')行)中,才能使MyApp成功加载:

如果我将该document.write行放在一个函数中,它就可以工作,否则就不行.发生了什么?

拆分和/或转义脚本文本不起作用.



1> bobince..:

要查看问题,请查看其script元素中的顶行:

');

因此,HTML解析器出现并看到了开始的

也就是说,一个未闭合的字符串文字和一个未完成的函数调用.这些会导致JavaScript错误,并且永远不会编写所需的脚本标记.

解决问题的常见尝试是:

document.write('...');

这在技术上仍然是错误的(并且不会验证).这是因为在SGML中,结束CDATA元素的字符序列实际上不是''而只是'

可能最好的解决方案是逃避序列.有一些可能性,但最简单的是使用JavaScript字符串文字转义符('\ xNN'):

document.write('\x3Cscript src="set1.aspx?v=1234\x26w=5678" type="text/javascript"\x3E\x3C/script\x3E');

上面的所有'<','>'和'&'字符都会转义,它不仅会停止出现在字符串中的'

(在XHTML中,没有CDATA元素这样的东西,所以这些字符与正常内容中包含的含义相同,脚本块中的字符串'

重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有