var wConfirm = window.confirm; window.confirm = function (message,trueFn,flaseFn) { try { var iframe = document.createElement("IFRAME"); iframe.style.display = "none"; iframe.setAttribute("src", 'data:text/plain,'); document.documentElement.appendChild(iframe); var alertFrame = window.frames[0]; var iwindow = alertFrame.window; if (iwindow == undefined) { iwindow = alertFrame.contentWindow; } var result = iwindow.confirm(message); if(result){ trueFn(); } else{ flaseFn(); } iframe.parentNode.removeChild(iframe); } catch (exc) { return wConfirm(message); } }
3.由上面的alert弹窗 衍生而出的问题项目中遇到
在 ios中 alert弹窗会先执行
例如
alert(1);
console.log(2);
alert(3);
ios会先弹出1 然后弹出3 最后才输出2
所以就会遇到一些情况
在alert语句前 本来是想让某些元素隐藏 或者 改变样式
但实际上ios会先弹出alert窗 但想改变的元素并还没有改变样式
只会在点击alert窗后才会执行
很蛋疼对不对?!
解决方法如下!!!!
将alert弹出的语句放在setTimeout里面
setTimeout(function(){
alert(3);
},0)
原理是 setTimeout会在js空闲之后才会执行里面的函数
所以把弹窗放进里面 就能确保alert之前的语句都执行完毕了(不知道说得对不对 这是由我自己总结出来的 若错误 求轻喷)