gpt4 book ai didi

javascript - 多个 <script> 标签和 <!--//FF3 和 Opera 需要 -->

转载 作者:行者123 更新时间:2023-11-28 02:51:31 26 4
gpt4 key购买 nike

我使用 Spring Roo 生成了一个基本的 Web 项目。 UI 基于 JSP,采用 Tiles 布局。查看默认布局代码,我注意到标签定义如下:

<script src="${dojo_url}" type="text/javascript" ><!-- //required for FF3 and Opera --></script>
<script src="${spring_url}" type="text/javascript"><!-- //required for FF3 and Opera --></script>
<script src="${spring_dojo_url}" type="text/javascript"><!-- //required for FF3 and Opera --></script>

如果我去掉脚本标签之间的注释,Firefox 中生成的 HTML 包含第一个标签,但不包含其他标签。如果我将注释放回生成的 HTML 中,则结果是正确的。

我的问题是:为什么会出现这种行为?

脚本标记的 ( documentation ) 没有提到它需要包含任何类型的数据内容。这是浏览器问题(如评论所暗示的)还是 JSP 或 Spring 问题?

返回 HTML 和浏览器输出
无论注释是否存在,cURL 结果看起来都是一样的:

<head>
<meta name="generator" content="HTML Tidy for Windows (vers 14 February 2006), see www.w3.org" />
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
<meta content="IE=8" http-equiv="X-UA-Compatible" />
<link href="/student-cloud-app/static/styles/login.css;jsessionid=FFED09C524087878AEF09142A6A6F375" media="screen" type="text/css" rel="stylesheet" />
<link href="/student-cloud-app/static/images/favicon.ico;jsessionid=FFED09C524087878AEF09142A6A6F375" rel="SHORTCUT ICON" />
<script type="text/javascript" src="/student-cloud-app/resources/dojo/dojo.js;jsessionid=FFED09C524087878AEF09142A6A6F375"></script>
<script type="text/javascript" src="/student-cloud-app/resources/spring/Spring.js;jsessionid=FFED09C524087878AEF09142A6A6F375"></script>
<script type="text/javascript" src="/student-cloud-app/resources/spring/Spring-Dojo.js;jsessionid=FFED09C524087878AEF09142A6A6F375"></script>
<title>
Sample App
</title>
</head>

事实上,无论注释是否存在,从 Firefox 中查看源代码看起来都是一样的:

<head>
<meta name="generator" content="HTML Tidy for Windows (vers 14 February 2006), see www.w3.org" />
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
<meta content="IE=8" http-equiv="X-UA-Compatible" />
<link href="/student-cloud-app/static/styles/login.css" media="screen" type="text/css" rel="stylesheet" />
<link href="/student-cloud-app/static/images/favicon.ico" rel="SHORTCUT ICON" />
<script type="text/javascript" src="/student-cloud-app/resources/dojo/dojo.js"></script>
<script type="text/javascript" src="/student-cloud-app/resources/spring/Spring.js"></script>
<script type="text/javascript" src="/student-cloud-app/resources/spring/Spring-Dojo.js"></script>
<title>
Sample App
</title>
</head>

但是如果我打开 Firebug 并检查 HTML 树,删除注释后就会出现一个脚本元素,并且它包含一条错误消息:

Failed to load source for: http://localhost:8080/student-cloud-app/resources/dojo/dojo.js

我得到的是空白页面而不是登录表单。如果我把注释放回去,Firebug 会报告所有脚本标签,没有错误,并且页面会显示登录表单。禁用Firebug对于页面是否正确渲染没有影响;没有评论 = 空白页面,评论 = 正确呈现的页面。

更新:返回的实际标签是自动关闭的。 HTML tidy 正在解决这个问题。自关闭脚本标签实际上是导致问题的原因。

更新 2:示例 HTML下面是在浏览器中运行的具有正确闭合脚本标记的 HTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta content="text/html; charset=UTF-8"
http-equiv="Content-Type" />
<meta content="IE=8" http-equiv="X-UA-Compatible" />
<link href="/student-cloud-app/static/styles/login.css"
media="screen" type="text/css" rel="stylesheet" />
<link href="/student-cloud-app/static/images/favicon.ico"
rel="SHORTCUT ICON" />
<script type="text/javascript" src="/static/scripts/ajax.js"></script>
<script type="text/javascript" src="/static/scripts/jquery-1.4.2.min.js"></script>
<title>Student Cloud</title>
</head>
<body>
<div id="container">
<form method="POST"
action="/student-cloud-app/static/j_spring_security_check"
name="f">
<table align="center" class="table">
<tr>
<td>
<label for="j_username">User name:</label>
</td>
<td>
<input name="j_username" type="text"
id="j_username" />
</td>
</tr>
<tr>
<td>
<label for="j_password">Password:</label>
</td>
<td>
<input name="j_password" type="password"
id="j_password" />
</td>
</tr>
<tr>
<td class="login_button" colspan="2">
<input value="Login" type="submit" />
</td>
</tr>
</table>
</form>
</div>
</body>
</html>

这里是完全相同的 HTML,除了自闭合脚本标记:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta content="text/html; charset=UTF-8"
http-equiv="Content-Type" />
<meta content="IE=8" http-equiv="X-UA-Compatible" />
<link href="/student-cloud-app/static/styles/login.css"
media="screen" type="text/css" rel="stylesheet" />
<link href="/student-cloud-app/static/images/favicon.ico"
rel="SHORTCUT ICON" />
<script type="text/javascript" src="/static/scripts/ajax.js" />
<script type="text/javascript" src="/static/scripts/jquery-1.4.2.min.js" />
<title>Student Cloud</title>
</head>
<body>
<div id="container">
<form method="POST"
action="/student-cloud-app/static/j_spring_security_check"
name="f">
<table align="center" class="table">
<tr>
<td>
<label for="j_username">User name:</label>
</td>
<td>
<input name="j_username" type="text"
id="j_username" />
</td>
</tr>
<tr>
<td>
<label for="j_password">Password:</label>
</td>
<td>
<input name="j_password" type="password"
id="j_password" />
</td>
</tr>
<tr>
<td class="login_button" colspan="2">
<input value="Login" type="submit" />
</td>
</tr>
</table>
</form>
</div>
</body>
</html>

保存为 .html 文件时,第一个示例在浏览器中正确显示,第二个示例则不能。

最佳答案

当评论到位后,<script>生成的 HTML 中的标签的结束标签为 </script> 。当这些评论被删除时,标签就会自动关闭。

显然自关闭的脚本标签是 problematic在大多数浏览器中。感谢 thenduks 为我指明了正确的方向。

关于javascript - 多个 &lt;script&gt; 标签和 &lt;!--//FF3 和 Opera 需要 -->,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3659899/

26 4 0