不仅仅是javascript这种解释型的语言会有这种问题,其他的解释类型的语言也或多或少有这样的需求。 就是在常规的语句流程中避开关键字的使用。

举个栗子

<!doctype>
<html>
	<head>
		<title>test</title>
	</head>
	<body>
		<h2>test</h2>

		<script type="text/javascript">

			alert('</script>');

		</script>

	</body>
</html>

这个例子比较极端了,但是很好说明问题,就是说,当某些语言读到关键字出现的时候,就停止工作了,而不是像我们想要的结果一样。 比如,跳出个对话框,说“” 那么如何解决呢. 第一种方法,拼合关键字

<!doctype>
<html>
	<head>
		<title>test</title>
	</head>
	<body>
		<h2>test</h2>

		<script type="text/javascript">

			alert('</scr'+'ipt>');

		</script>

	</body>
</html>

将关键词这个完整的词汇分割成无意义的字符字串,你可以在这里继续发挥,比如转义字符,或者2次转换字符串。 悄悄的说一下,其实这和某些木马所谓的加花,混淆是一致的。。。 接着说第二种方法,就是调用外部数据保存。

<!doctype>
<html>
	<head>
		<title>test</title>
	</head>
	<body>
		<h2>test</h2>
		<input type="text" value="</script>" />
		<script type="text/javascript">

			alert (document.getElementsByTagName('input')[0].value);

		</script>

	</body>
</html>

使用默认的控件来保存我们需要的内容也是个不错的方法,因为控件内的数据保存类型有默认类型,比如input,我设置为text, 那么取到的数据就是字符串,这么一来也就没问题了。 如果你说这种你觉得木有含量,那么延伸下吧。 自定义附加数据来做,当然同理使用json,xml,或者其他方式的交互数据也是一样。

<!doctype>
<html>
	<head>
		<title>test</title>
	</head>
	<body>
		<h2>test</h2>
		<span mydata="</script>"></span>
		<script type="text/javascript">

			alert(document.getElementsByTagName('span')[0].getAttribute("mydata"));
			
		</script>

	</body>
</html>

先写到这里吧。