JavaScript被解析为HTML

JavaScript被解析为HTML,javascript,html,spring-boot,Javascript,Html,Spring Boot,我有一个spring boot项目,该项目有一个html页面。如下所示: <!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head lang="en"> <meta charset="utf-8"></meta> <meta http-equiv="X-UA-Compatible" content="IE=edge"></m

我有一个spring boot项目,该项目有一个html页面。如下所示:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
    <head lang="en">
    <meta charset="utf-8"></meta>
    <meta http-equiv="X-UA-Compatible" content="IE=edge"></meta>
    <meta name="viewport" content="width=device-width, initial-scale=1"></meta>
</head>
<body>
    //...
</body>

<script th:inline="javascript">
    //...

    function toVaild(){
        var success = true;
        var arr = new Array();
        //...
        for(var i = 0;i < arr.length; i++){
            //...
        }
        return success;
    }
    //...   
</script>
</html>

我知道解决方案,使用
/**/
环绕JavaScript代码。但我不知道为什么.JavaScript被视为html。

您的模板引擎似乎需要XML。XML被设计成可以在解析器不知道什么标记是可能的、它们的意思或者每种类型的标记可以包含什么的情况下对其进行解析(这使得它更简单,更容易用于其他类型的数据);它只确定什么是标记,匹配开始和结束标记,并将该信息传递给程序的其余部分

例如,这意味着,与HTML解析器不同,XML解析器不知道
meta
img
br
等标记没有内容,这就是为什么需要关闭它们(顺便说一下,您可以通过以
/>
结尾而不是添加结束标记来指示标记没有内容;也就是说,
而不是
)。这也意味着解析器不知道
标记包含的代码可能少于个符号,并且不能包含其他标记。就解析器而言,这只是另一个标记名。
告诉解析器停止尝试查找标记,只将所有内容视为纯文本。

您正在使用Thymeleaf(不是普通的HTML),而且Thymeleaf非常严格,确实需要类似于中提到的chridd的XML结构

您可以通过
spring.Thymeleaf.mode
属性更改Thymeleaf模式来更改此行为(如果您不想使用
技巧)。一种可能的解决方案是使用
LEGACYHTML5
模式:

spring.thymeleaf.mode=LEGACYHTML5
但是,如果使用此模式,则需要添加其他依赖项:


net.sourceforge.nekohtml
内科特米尔

或者,如果您不需要Thymeleaf或其他模板引擎,您可以使用纯静态HTML页面并将HTML页面移动到src/main/resources/publicsrc/main/resources/static文件夹中。

不知道这是否是问题所在,但
HTML
元素不能有
脚本
ele它应该放在
body
head
元素中。我尝试将javaScript放在body中,问题仍然存在。但是我的文本类型是html,而不是XML,整个项目不习惯XML,我不知道为什么?非常感谢。我知道了
spring.thymeleaf.mode=LEGACYHTML5