之前在写《博客园自定义博客侧边栏公告的过滤漏洞》的时候遇到了一个javascript代码报错“语法错误”的问题,一直不得以解决,感谢Arliang发现了并为我进行了耐心的解释,现整理如下:

javascript代码中只要出现了“</script>”,无论是在引号中还是在注释中都会被认为是script标签的结束,例如:

示例1:

 <script>
alert("aaa");
//</script>
alert("bbb");
</script>

以上代码中第2行会被成功执行,但是遇到第3行的“</script>”的时候,script标签就会被结束,所以第4行无法执行,只能被作为普通的HTML文档原样显示出来。第5行的“</script>”成为了无用代码。上面的代码完全等价于:

<script>
alert("aaa");
</script> alert("bbb");

示例2:

 <script>
/*
alert("aaa");
</script>
*/
alert("bbb");
</script>

这段代码和示例1如出一辙,第3行代码因为在注释块中所以不会执行,当遇到第4行中的“</script>”的时候script标签即被结束,于是第5、6行就被当成HTML文档原样显示,第7行成了无用代码。以上代码完全等价于:

<script>
</script>
*/alert("bbb");

示例3:

 <script>
var str='<script>alert("aaa");</script>';
document.write(str);
</script>

这段代码中,第2行的“</script>”会被认为是结束script标签,于是给字符串变量str赋值的操作就因缺少后引号而报语法错误,而第2行最后的“';”会被当成普通HTML文档原样显示;第3行页因在script标签外而被当成普通HTML文档原样显示;第4行成为了无用代码。以上代码完全等价于:

<script>
var str='<script>alert("aaa");
</script> ';document.write(str);

示例4:

 <script>
alert('</script>');
alert('aaa');
</script>

一样的,第2行中的“</script>”会被当成script标签的结束,于是alert方法因为缺少后引号和右括号而被判定为语法错误,同时第2行剩下的“');”会被当成普通HTML文档原样显示;第3行因为不在script标签内,所以也会被当成普通HTML文档原样显示;第4行成为了无用代码。以上代码完全等价于:

<script>
alert('
</script> ');alert('aaa');

总结:

javascript代码中不要尝试注释“</script>”,如果不用就直接删掉,否则会导致奇怪的语法或逻辑错误;代码中如果要把“</script>”当字符串处理一定要将其分割,如

str='</'+'script>';

本文章系受著作权法保护,未经著作人同意,不得盗用;使用或引用本文章内容请注明作者名、原地址:书中叶http://www.cnblogs.com/libook

警惕javascript代码中的“</script>”!的更多相关文章

  1. asp.net mvc页面javascript代码中如何使用razor

    我们需要用<text>将javascript代码包含起来,强制让razor编译器回到内容模式, 或者将javascript代码放在函数中,让razor编译器可以识别,请看下面两个例子: & ...

  2. 使用themeleaf页面技术时,在JavaScript代码中使用for循环报错.....

    解决方法: 在for循环前加上/* <![CDATA[ */,在for循环后加/* ]]> */,这样就能正常解析了:如下 /* <![CDATA[ */ for (var i = ...

  3. 使用<script>标签在HTML网页中插入JavaScript代码

    新朋友你在哪里(如何插入JS) 我们来看看如何写入JS代码?你只需一步操作,使用<script>标签在HTML网页中插入JavaScript代码.注意, <script>标签要 ...

  4. Cordova插件中JavaScript代码与Java的交互细节介绍

    在Cordova官网中有这么一张架构图:大家看右下角蓝色的矩形框"Custom Plugin"--自定义插件.意思就是如果您用Cordova打包Mobile应用时,发现您的移动应用 ...

  5. 《浏览器工作原理与实践》<10>作用域链和闭包 :代码中出现相同的变量,JavaScript引擎是如何选择的?

    在上一篇文章中我们讲到了什么是作用域,以及 ES6 是如何通过变量环境和词法环境来同时支持变量提升和块级作用域,在最后我们也提到了如何通过词法环境和变量环境来查找变量,这其中就涉及到作用域链的概念. ...

  6. 在html中添加script脚本的方法和注意事项

    在html中添加script脚本有两种方法,直接将javascript代码添加到html中与添加外部js文件,这两种方法都比较常用,大家可以根据自己需要自由选择 在html中添加<script& ...

  7. 浏览器地址栏运行JavaScript代码

    这个很多人应该还是知道的,在浏览器地址栏可以直接运行JavaScript代码,做法是以javascript:开头后跟要执行的语句.比如: javascript:alert('hello from ad ...

  8. Web前端开发最佳实践(10):JavaScript代码不好读,不好维护?你需要改变写代码的习惯

    前言 这篇文章本应该在上一篇文章:使用更严格的JavaScript编码方式,提高代码质量之前发布,但当时觉得这篇文章太过基础,也就作罢.后来咨询了一些初级的开发者,他们觉得有必要把这篇文章也放上来.尽 ...

  9. 可进行JavaScript代码测试与调试的12个网站

    概述:JavaScript是网站前端开发最为重要的一门编程语言,本文收集了能够在线测试与调试JavaScript代码的12个网站 1.JS Bin JS bin是一个为JavaScript和CSS爱好 ...

随机推荐

  1. codeforces D

    D. Mishka and Interesting sum time limit per test 3.5 seconds memory limit per test 256 megabytes in ...

  2. 利用 img 和 script 发送跨域请求

    利用img.src可以发送http请求,但是发送http请求不是img.src的真正用意. 同样,用script.src去请求jsonp格式的接口数据也不是script元素的最初设计用途. 但是这些歪 ...

  3. Eliza Doolittle lyrics Big City

    Eliza Doolittle lyrics  Big City 歌词很好,现在还没有,以后添加进来.

  4. C++仿函数(functor)详解

    C++仿函数(functor)详解 所谓的仿函数(functor),是通过重载()运算符模拟函数形为的类. 因此,这里需要明确两点: 1 仿函数不是函数,它是个类: 2 仿函数重载了()运算符,使得它 ...

  5. bash shell 合并文件

    # 按列合并文件 paste file1 file2 file3 > file4 # 要先 sort, 再 file1 file2 paste格式为: paste -d -s -file1 fi ...

  6. 转 Android中进入系统设置界面

    Android软件时,常常需要打开系统设置或信息界面,来设置相关系统项或查看系统的相关信息,这时我们就可以使用以下语句来实现:(如打开“无线和网络设置”界面) Intent intent = new ...

  7. tranform-scale 缩小元素,移上去文字抖动

    元素缩小后,鼠标移上去之后文字会出现抖动, -webkit-transform:scale(0.5); 修复代码如下: *{ -webkit-backface-visibility: hidden; ...

  8. Mac系统在终端中查看CPU信息的命令

    在mac os x的终端中以命令行的形式查看本机cpu信息: sysctl -n machdep.cpu.brand_string E.G. lis-mbp:Home jenkins$ sysctl ...

  9. Android公共库(缓存 下拉ListView 下载管理Pro 静默安装 root运行 Java公共类)

    介绍总结的一些android公共库,包含缓存(图片缓存.预取缓存).公共View(下拉及底部加载更多ListView.底部加载更多ScrollView.滑动一页Gallery).及Android常用工 ...

  10. 五大主流SQL数据库

    一. 开放性 1. SQL Server 只能在windows上运行,没有丝毫的开放性,操作系统的系统的稳定对数据库是十分重要的.Windows9X系列产品是偏重于桌面应用,NT server只适合中 ...