去除ios移动端alert/confirm的网址(url)

        <div class="article_bar clearfix">
            <div class="artical_tag">
                <span class="original">转载</span>
                <span class="time">2016年04月21日 19:55:12</span>
            </div>
            <ul class="article_tags clearfix csdn-tracking-statistics" data-mod="popu_377" style="display: none;">
                <li class="tit">标签:</li>

            </ul>
            <ul class="right_bar">
                <li><button class="btn-noborder"><i class="icon iconfont icon-read"></i><span class="txt">5802</span></button></li>
                <!--<li><button class="btn-noborder"><i class="icon iconfont icon-dashang-"></i><span class="txt">0</span></button></li>-->

                <li class="edit" style="display: none;">
                    <a class="btn-noborder" href="http://write.blog.csdn.net/postedit/51212336">
                        <i class="icon iconfont icon-bianji"></i><span class="txt">编辑</span>
                    </a>
                </li>
                <li class="del" style="display: none;">
                    <a class="btn-noborder" onclick="javascript:deleteArticle(fileName);return false;">
                        <i class="icon iconfont icon-shanchu"></i><span class="txt">删除</span>
                    </a>
                </li>
            </ul>
        </div>
        <div id="article_content" class="article_content csdn-tracking-statistics" data-mod="popu_307" data-dsm="post" style="overflow: hidden;">

去除移动端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,终于发现个好办法:

[javascript] view plain copy
print ?
  1. <span style=“font-size:10px;”>     <script>  
  2.         window.alert = function(name){  
  3.              var iframe = document.createElement(“IFRAME”);  
  4.             iframe.style.display=”none”;  
  5.             iframe.setAttribute(”src”‘data:text/plain,’);  
  6.             document.documentElement.appendChild(iframe);  
  7.             window.frames[0].window.alert(name);  
  8.             iframe.parentNode.removeChild(iframe);  
  9.         }  
  10.               
  11.         alert(’xxx’);  
  12.         </script></span>  
<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
print ?
  1. var result = window.frames[0].window.confirm(name);  
  2.     iframe.parentNode.removeChild(iframe);  
  3.     return result;  
var result = window.frames[0].window.confirm(name);
    iframe.parentNode.removeChild(iframe);
    return result;




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值