javascript题目,如何在重写alert后还能正常弹出alert

本文探讨了当JavaScript的alert函数被意外修改为无操作函数后,通过创建新的执行环境来恢复其正常功能的方法。文章详细介绍了五种不同的解决策略,包括使用iframe沙箱、打开新窗口、还原原始alert函数、利用原型链调用以及执行VBS脚本来实现。这些方法在不同浏览器环境下各有适用场景。

今天在群里遇到一道很有意思的题目,大家发挥所能,给出的答案五花八门。特意整理成博文发表出来:

//原题目:
window.alert = function(){};______;alert(1); 填空,使后面的alert(1)能正确弹出,至少列举两种不同思路。

解法一,创建新的执行环境,使用iframe沙箱

window.alert = function(){};
window.alert=function(obj){
    var iframe=document.createElement("iframe");
    iframe.src="javascript:void(0);"
    document.body.appendChild(iframe)
    iframe.contentWindow.alert(obj);
}
alert(1)

解法二,创建新的执行环境,打开新窗口

window.alert = function(){};
window.alert = function(a){
    window.open('','').alert(a)
    //window.createPopup().document.parentWindow.alert(a) //IE only
}
alert(1);

解法三, 弄回原来的alert(IE下失败)

window.alert = function(){};
window.alert = function(a){
    delete window.alert;
    window.alert(a);
}
alert(1);

解法四,思路同三(IE下失败)

window.alert = function(){};
window.alert = function(a){
   window.__proto__.alert.call(window,a);
  //window.constructor.prototype.alert.call(window,a);
}
 alert(1);

解法五(IE only)

window.alert = function(){};
execScript('sub alert(msg):msgbox msg:end sub', 'vbscript');
alert(1);

解法六,就是一晕招

window.alert = function(){};
window.alert = function(a){
    window.confirm(a)
}
alert(1);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值