<HTML>
 <HEAD>
  <TITLE> New Document </TITLE>
 </HEAD>
 <BODY>
 {
 alert(str);
idden; overflow-y: hidden;"> }
<mce;"> <mce;"> 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;" ;
 var s = "ff" + sstr  + "dd" ;
 var func = eval("test");
 func.call(func,s);
  </script>
 </BODY>
</HTML>

最近在弄JS验证功能的时候 遇到了Eval的参数问题,花了些时间解决之后,稍微总结了下。

问题示例:

<HTML> 

<BODY> 

 <script>

 var test =

 {show:function(str){alert(str);}}

 var s = "ffd'd" ;

 eval("test.show('" +s + "')");

 </script>  

</BODY>

</HTML>

  执行会报缺少')'

 

 

方法一: 使用转义符

<script>

 var test =

 {show:function(str){alert(str + 'test');}}

 var s = "ffd'd" ;

 eval("test.show('" +s.replace(/\\/g,"\\\\").replace(/'/g,"\\\'") + "')");

 </script>

 

 

方法二:把方法参数作为JS类的属性

 <script>

 var test = {show:function(){alert(this.str);},str:''};

 var s = "ffd'd" ;

 test.str = s;

 eval("test.show()");

 </script> 

 

方法三: 使用call

 <script>

 var test = {show:function(str){alert(str);}};

 var s = "ffd'd" ;

var func = eval("test.show");

func.call(func,s);

 </script>  

 

方法四:最简单的方法,使用function对象

 <script>

 var test = {show:function(str){alert(str);}};

 var s = "ffd'd" ;

var func = eval("test.show");

func(s);

 </script>  

相关文章:

  • 2022-12-23
  • 2021-11-01
  • 2021-05-30
  • 2021-05-22
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-10-06
  • 2022-12-23
  • 2021-12-31
  • 2021-05-08
  • 2021-07-14
相关资源
相似解决方案