一次非常诡异的WebView js失效问题

解决了一个复杂的WebView问题,当从Activity a切换到b再返回a时,a中的WebView JavaScript会失效。通过细致排查,发现调用`mWebView.pauseTimers()`和`mWebView.resumeTimers()`是罪魁祸首。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近遇到一个很诡异的webview问题,两个Activity a和b,里面都使用了webview。

如果单独用a,并不会有问题。但是如果是a->b->a这样的顺序,会导致a里webview的js都失效了。

也就是webview之间发生了互相影响。

问题非常诡异,因为他们是不同的webview对象,排查一天,采用了二分法定位问题代码,最终发现导致bug的代码如下:

[java]  view plain  copy
  1. @Override  
  2.     protected void onResume() {  
  3.         super.onResume();  
  4.         mWebView.resumeTimers();  
  5.     }  
  6.     @Override  
  7.     protected void onPause() {  
  8.         super.onPause();  
  9.         mWebView.pauseTimers();  
  10.     }  

这两行代码看上去没啥毛病,网上也有很多类似用法,但是经测试,屏蔽掉后就解决了js失效的问题。

看了下api说明:

[java]  view plain  copy
  1. public void pauseTimers ()  
  2.   
  3. Added in API level 1  
  4. Pauses all layout, parsing, and JavaScript timers for all WebViews. This is a global requests, not restricted to just this WebView. This can be useful if the application has been paused.  


原来这个方法是全局生效的,会导致所有webview的js失效,太蛋疼了。

尊重原著,尊重作者,转自:http://blog.csdn.net/anjxue/article/details/50015847

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值