今天在群裡遇到一道很有意思的題目,大家發揮所能,給出的答案五花八門。特意整理成博文發表出來:
//原題目: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);