如何在runtime重载javascript alert函数

2019-03-25 13:45|来源: 网路

<html>
<head>
<script type="text/javascript">

function cmd()
{
   //precmd = "window.alert = function(str){ alert("aa" + str)};";
   cmd1 = "window.alert = function(str){ alert(\"aa\" + str)} ";
   eval(cmd1);
   eval(alert("hello"));
}
</script>
</head>
<body>

<input type="button" onclick="cmd()" value="eval" />

</body>
</html>



想在运行时重载alert,没有成功。

问题补充:
kjah 写道
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript">
window.onload=function(){
 cmd=function(){
	var alt=window.alert;
	return function (){
	window.alert=function(str){alt("aa" + str)};
	alert('hello');
}}()

}
</script>
</head>
<body>

<input type="button" onclick="cmd()" value="rewrite" />
</body>
</html>


这种实现要预先定义好一个script,不符合runtime动态改变的要求。

问题补充:
<html>
<body>

<script type="text/javascript">  
  
function cmd()  
{  
   var precmd = document.getElementById("aa").value;
   alert(precmd);
   eval(precmd + ";" + alert("bb"))
}  
</script> 

<form >
Script: <input id="aa" type="text" name="script" value = "window.alert = function(str) { alert('aa' + str)}" /><br />
<input  type="submit" value="Submit" onclick="cmd()" />
</form>


</body>

开始没描述清楚,对不起各位了,问题的本意是在一个input里重载alert,在进入cmd函数以后,理论上eval里面的alert会被覆盖,这段代码在firefox extention 里面可以过工作,但是在html中失败。


问题补充:
lixiaokui11 写道
你说的动态是指啥样的,这也可以拼成字符串再eval的啊

runtime 指的就是eval(str),比如evla(alert("aa")),把重载过的alert放在alert("aa")前。

问题补充:
lixiaokui11 写道
你说的动态是指啥样的,这也可以拼成字符串再eval的啊

runtime 指的就是eval(str),比如evla(alert("aa")),把重载过的alert放在alert("aa")前。

相关问答

更多