去除ios移動端alert/confirm的網址(url)
阿新 • • 發佈:2019-01-05
去除移動端alert/confirm的網址(url),有需要的朋友可以參考下。
在移動端使用原生的alert/confirm總是會顯示網址(url),介面看起來很醜,搜尋半天也找不到解決辦法,在絕望的時候看到一篇文章寫的很好,在此感謝http://ifindever.com/archives/260.html,還希望能幫助到大家。
最近在做小小創客 webapp,碰到一個問題,以前的版本,ios 和Android都可以通過重寫webview的alert等彈窗事件來隱藏掉彈窗的標題,但是ios7之後,api被禁用了,導致ios無法重寫隱藏標題:
1.通過js呼叫ios原生程式碼來實現,即:window.alert = function(str){window.local.href = " xx://str/" +str}
2.js+html+css模擬,但是為了實現alert等的阻塞執行,需要把後面的程式碼放入回撥函式中執行
但是還是感覺這兩種方式實現不太優雅,都需要對現有程式碼做比較大的改動,不死心,於是繼續google,終於發現個好辦法:
<span style="font-size:10px;"> <script> window.alert = function(name){ var iframe = document.createElement("IFRAME"); iframe.style.display="none"; iframe.setAttribute("src", 'data:text/plain,'); document.documentElement.appendChild(iframe); window.frames[0].window.alert(name); iframe.parentNode.removeChild(iframe); } alert('xxx'); </script></span>
這個方法在於重寫了alert方法(confirm方法同理),不需要改動現有程式碼,並且解決了彈窗標題出現網址的問題。不過需要注意的是,每次在框架中執行完一個alert/confirm後,需要將框架移除,下次再重新載入,否則在chrome中會引發跨域執行,從而被chrome攔截。
這裡還有confirm,重寫window.confirm之後,確認和取消點選的事件都是執行取消,這時需要這樣寫:
confirm需要return子框架的結果:
var result = window.frames[0].window.confirm(name); iframe.parentNode.removeChild(iframe); return result;