標籤:child splay asc ext function 否則 details chrome text
在移動端使用原生的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,終於發現個好辦法:
[javascript] view plain copy
- <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子架構的結果:
[javascript] view plain copy
- var result = window.frames[0].window.confirm(name);
- iframe.parentNode.removeChild(iframe);
- return result;
地址:http://blog.csdn.net/hx_lei/article/details/51212336
去除ios移動端alert/confirm的網址(url)