最新消息:欢迎光临!

ios webview alert弹窗不显示网址解决办法

webapp findever 24883浏览 0评论

最近做hybrid 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,终于发现个好办法:

               <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>

这个方法在于重写了alert方法(confirm方法同理),不需要改动现有代码,并且解决了弹窗标题出现网址的问题。不过需要注意的是,每次在框架中执行完一个alert/confirm后,需要将框架移除,下次再重新载入,否则在chrome中会引发跨域执行,从而被chrome拦截。

转载请注明:Findever » ios webview alert弹窗不显示网址解决办法

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (25)

  1. 您好,我是html+js web项目,js中增加上述的清除alert携带的url信息,在浏览器上运行是可行的,但是在apk原生态,alert弹出确定后,会出现白板的现象,请问这个要怎么解决呢?
    清夏时光1年前 (2017-05-04)回复
    • 白板现象具体是怎样呢,另外是执行到哪个位置的时候出现的呢
      findever1年前 (2017-05-05)
  2. 我用单页面html confirm 不管点击那个 都是取消
    echo丶2年前 (2016-09-06)回复
    • 可以看下上面的讨论,confirm需要return子框架结果
      findever2年前 (2016-09-07)
  3. 我用这个 自己写的confirm确认 取消有问题 大家有遇到过吗
    张晓曼2年前 (2016-09-01)回复
    • 有什么问题可以提出来探讨下
      findever2年前 (2016-09-01)
    • 我觉遇到了这个问题 点击OK没反应 弹框没用消失
      乌龟漫漫3个月前 (05-21)
  4. 重写window.confirm 现在之后,确认和取消点击的事件都是执行的取消,怎么破!
    Gladiolus2年前 (2016-04-14)回复
    • 你return了子框架的confirm结果了吗
      findever2年前 (2016-04-14)
    • 没有吧,我直接把上面的代码中的alert替换成confirm,其他没有处理
      Gladiolus2年前 (2016-04-15)
    • 兄弟 你的搞好了没 我也很急呀 也遇到了这个问题
      怀Nian童年2年前 (2016-04-15)
    • confirm需要return子框架的结果... var result = window.frames[0].window.confirm(name); iframe.parentNode.removeChild(iframe); return result;
      findever2年前 (2016-04-16)
    • 你这个return 第一次可以回去点击确定的True 不刷新页面的情况下 第二次就是undefined
      怀Nian童年2年前 (2016-04-16)
    • 每次都删除了框架重新模拟的呢,应该不会出现这样的情况才对
      findever2年前 (2016-04-16)
    • 可以了 是我写错了 谢谢你了
      怀Nian童年2年前 (2016-04-21)
    • window.confirm = function(name){ var iframe = document.createElement("IFRAME"); iframe.style.display="none"; iframe.setAttribute("src", 'data:text/plain,'); document.documentElement.appendChild(iframe); var result = window.frames[0].window.confirm(name); iframe.parentNode.removeChild(iframe); return result; };还是报错?
      陈孝央2年前 (2016-09-13)
  5. ??
    BaBng。3年前 (2016-01-07)回复
  6. 我重写了window.confirm 现在只有ok没有Cancel怎么破 ?在线等。 急 !
    BaBng。3年前 (2016-01-07)回复
    • 注意window.frames[0].window.alert(name);这一句,你重写的confirm方法就要使用window.frames[0].window.confirm(name); 也就是方法名要对应上
      findever3年前 (2016-01-08)
  7. 真心黑科技
    limi3年前 (2015-06-15)回复