- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
hlo "不呈现任何内容?-6ren"> hlo "不呈现任何内容?-我正在读一本书,然后我读到这行:-“HTML 解析器不知道您的 JavaScript 代码;它像对待任何其他文本一样对待它”。所以如果我们写: alert("first"); -6ren">
我正在读一本书,然后我读到这行:-“HTML 解析器不知道您的 JavaScript 代码;它像对待任何其他文本一样对待它”。所以如果我们写:
<script type="text/javascript">
alert("first");
var string = "</script>";
</script>
我们得到一个错误,因为 "</script>"
作为 HTML 解析器的结束标记,第二行 </script>
关闭脚本然后执行该脚本标记,并给出:-
Uncaught SyntaxError: Unexpected token ILLEGAL
即使是第一个alert()
没有执行?我不知道为什么?但我的主要问题是,如果 "</script>"
当我们写这样的东西时被视为标签:
var str = "<h1> hello world </h1>";
那么这不会在屏幕上呈现任何“hello world”吗?根据前面的示例,HTML 解析器也应该将该字符串视为 HTML 标记,但它没有?谁能给我解释一下?抱歉英语不好:(
最佳答案
您应该了解浏览器的工作原理。 HTML 和 Javascript 是如何呈现的。这是一本好书How browsers work
下面的文字来自上面的链接。
标记化算法
算法的输出是一个 HTML 标记。该算法表示为状态机。每个状态消耗输入流的一个或多个字符,并根据这些字符更新下一个状态。该决定受当前标记化状态和树构造状态的影响。这意味着相同的消费 Angular 色将根据当前状态为正确的下一个状态产生不同的结果。算法太复杂,无法完全理解,所以让我们看一个简单的例子来帮助我们理解原理。
基本示例 - 标记以下 HTML:
<html>
<body>
Hello world
</body>
</html>
初始状态是“数据状态”。当遇到“<”字符时,状态变为“标签打开状态”。使用“a-z”字符会导致创建“开始标记 token ”,状态更改为“标记名称状态”。我们一直保持这种状态,直到“>”字符被消耗掉。每个字符都附加到新 token 名称。在我们的例子中,创建的 token 是一个“html” token 。当到达“>”标签时,发出当前 token 并且状态变回“数据状态”。 “”标签将通过相同的步骤进行处理。到目前为止,发出了“html”和“body”标签。我们现在回到“数据状态”。消耗“Hello world”的“H”字符将导致创建和发出字符标记,这一直持续到到达“”的“<”为止。我们将为“Hello world”的每个字符发出一个字符 token 。我们现在回到“标签打开状态”。使用下一个输入“/”将导致创建“结束标记 token ”并移动到“标记名称状态”。我们再次保持这种状态,直到我们到达“>”。然后新的标记 token 将被发出,我们回到“数据状态”。 ""输入将像前面的情况一样处理。
这同样适用于 </script>
标记太。这就是它的工作原理。
关于javascript - 为什么脚本标记中的 "</script>"被视为结束标记,但 "<h1> hlo </h1>"不呈现任何内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34735770/
将“”转换为“>”的主要目的是避免以下内联脚本: var foo = "alert('bug');"; // the value of foo is generated from server
我有以下想法: 在德语中我们有四个额外的字母(ä、ö、ü、ß),我不知道任何其他语言有这些声音,但我认为有口音的法国人也知道这个问题。我们在 Google Play 商店中有很多适用于城市、公交车站、
#!/bin/bash read nameArg find -name "$nameArg" 使用此代码,当我输入例如 *.txt 时,它将为我提供以 txt 结尾的所有文件,但我只想要名称为 *.t
我在 MySQL 5.7.27 中有一个带有 utf8mb4_unicode_ci 排序规则的用户表。 不幸的是, ı 没有像 i 那样进行线程化,例如,以下查询将找不到 Yılmaz select
我的简单 MySQL 查询: SELECT `word` FROM `nouns` WHERE `word` LIKE 'vandenys' 返回: vandenis 但是“vandenYs
虽然我以前用过这样的代码,而且很明显编译器有足够的信息可以工作,但我真的不明白为什么会这样编译: template auto foo(const T& t, I i) { return st
如何实现一个以 int 开头的函数,并在每次(经历有限数量的可能性)返回 1 的几个(例如,5 个) bool 值之一时从中减去 1。 理想情况下的外观是: function list1 list2
因此,如果我的数据库中有一个包含值的表 1 2 3 4 NULL 我执行了查询 SELECT MAX(col1) FROM 我会得到 4。有什么办法可以改变这个,所以 Null 将被视为最大值而不是
例如:我在数据库中有一条记录:[Example] Attena Illusive - 01 [720p].mkv尝试使用查询进行搜索: SELECT ts_rank_cd(to_tsvector('
我试图创建 2 个简单的盒子,并允许用户从 1 个盒子中选择数据,然后将其复制到第二个盒子。如果第二个框中已经有相同的文本,请在后面附加一些简单的文本。 它基本上在该项目不在第二个框中时起作用。但是,
这个问题已经有答案了: How to read a file from jar in Java? (6 个回答) 已关闭10 年前。 我想从我的 *jar 存档中读取文件。我在互联网上阅读了如何从 z
我在 Javascript 中偶然发现了一个我无法理解的极其奇怪的事件。 这是一个非常简单的 if 语句: let hours = 20; 我在这里设置了一个断点,并在调试器中设置了hours = 0
这两个查询给出了完全相同的结果: select * from topics where name='Harligt'; select * from topics where name='Härligt
我有一个包含数值和 NaN 的表格。求和时,如果所选值包含 NaN,则结果将为 NaN。有没有办法让 postgresql 在求和时将它们视为 0 而不是 NaN?或者我只需要将表中的所有 NaN 转
我有一个正在构建的页面,我希望当我滚动(向上或向下)页面时滚动到下一个 div(每个 div 是窗口高度的 100%)。并在那里“固定”,直到您再次滚动。可以在此处看到我正在努力完成的示例: http
我正在用 Javascript 制作一个小的 HTML 页面。它不需要服务器端,但我需要存储这个人所做的事情,所以我正在使用 localStorage。( list ) 如今,浏览器可以选择不存储 c
这两个查询给了我完全相同的结果: select * from topics where name='Harligt'; select * from topics where name='Härligt
我想向 Lua 公开一些 C++ 类。我可以调用Widget:New()获取带有元表集的返回用户数据到表 WidgetMeta . WidgetMeta包含所有 C++ 函数,它是 __index设置
我正在使用一个大型的旧数据库,现在我尝试使用 hibernate 而不是 SQL 来访问它。更大的问题之一是在外键中无限制地使用“0”和“-1”(意思是“NULL”)。 我生成了很多代码,但我手动添加
我试图将一个数字传递到一个 BYTES 数组中 - 但将该数字视为一个字符数组。这是我的代码: for(int i=1;i<=totalFiles;i++) { BYTE* input = n
我是一名优秀的程序员,十分优秀!