Android WebView的那些坑

最近接手的一些需求与H5相关,自然而然就涉及到WebView这神器,大家都知道这里面的水很深。

下面我要说的就是我在这里面遇到的一些坑,今天下午下班被老大就到办公室,学习了3个小时,

刚从办公室里面出来,回到座位上,唤醒电脑就看到了测试妹子发过了的bug:说收到用户反馈说

灰度包中的包月页面弹不出来手机键盘,用户无法输入手机号码。

收到这个消息我还没有反应过来,还有测试妹子说包月页面是H5页面,那问题就是WebView了。

我回头看下下我写的webView基类,是这样:

public classBaseWebViewextendsWebView {

private static finalStringTAG="BaseWebView";

publicBaseWebView(Context context) {

this(context,null);

}

publicBaseWebView(Context context,AttributeSet attrs) {

this(context,attrs,0);

}

publicBaseWebView(Context context,AttributeSet attrs, intdefStyleAttr) {

super(context,attrs,defStyleAttr);

init(context);

}

@TargetApi(VERSION_CODES.LOLLIPOP)

publicBaseWebView(Context context,AttributeSet attrs, intdefStyleAttr, intdefStyleRes) {

super(context,attrs,defStyleAttr,defStyleRes);

init(context);

}

publicBaseWebView(Context context,AttributeSet attrs, intdefStyleAttr, booleanprivateBrowsing) {

super(context,attrs,defStyleAttr,privateBrowsing);

init(context);

}

}


简单点就是这个样子的:


Android WebView的那些坑_第1张图片

咋一看,没有什么问题啊!!!但是可以怀疑任何人,千万不要怀疑测试。于是我想起了一个金句:有任何问题,去看源码。

用道上人的说法是:look the fucking code。

于是我转手就跳转到了源码里面:

public classWebViewextendsMockView {

/**

* Construct a new WebView with a Context object.

*@paramcontextA Context object used to access application assets.

*/

publicWebView(Context context) {

this(context, null);

}

publicWebView(Context context,AttributeSet attrs) {

this(context,attrs,com.android.internal.R.attr.webViewStyle)

}

publicWebView(Context context,AttributeSet attrs, intdefStyle) {

super(context,attrs,defStyle);

}

...

}

简单点就是这个样子的:


Android WebView的那些坑_第2张图片

图片上标注的就是我惊奇的发现。这个真的是打脸啊。于是我就按照源码的写了。果然问题就解决了。

ps:这次的问题,算是我长久以来存在的缺陷,这是我之前在自定义基础控件时,时常忽略的问题,也给了我深刻的

认识,所以才有了这篇小的TIPS,与群共勉!

你可能感兴趣的:(Android WebView的那些坑)