WebView中文本输入框,点击弹出输入框后,崩溃

来源:互联网 发布:苹果电脑炒股软件 编辑:程序博客网 时间:2024/05/16 16:22

CRASH详情

Log中报错如下

01-01 09:46:22.452 4945 4945 W System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.graphics.drawable.Drawable.getPadding(android.graphics.Rect)' on a null object reference 01-01 09:46:22.453 4945 4945 W System.err: at org.chromium.ui.DropdownPopupWindow.<init>(DropdownPopupWindow.java:73) 01-01 09:46:22.454 4945 4945 W System.err: at org.chromium.components.autofill.AutofillPopup.<init>(AutofillPopup.java:46) 01-01 09:46:22.454 4945 4945 W System.err: at org.chromium.android_webview.AwAutofillClient.showAutofillPopup(AwAutofillClient.java:51) 01-01 09:46:22.454 4945 4945 W System.err: at org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method) 01-01 09:46:22.454 4945 4945 W System.err: at org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:41) 01-01 09:46:22.454 4945 4945 W System.err: at android.os.Handler.dispatchMessage(Handler.java:102) 01-01 09:46:22.454 4945 4945 W System.err: at android.os.Looper.loop(Looper.java:154) 01-01 09:46:22.454 4945 4945 W System.err: at android.app.ActivityThread.main(ActivityThread.java:6119) 01-01 09:46:22.454 4945 4945 W System.err: at java.lang.reflect.Method.invoke(Native Method) 01-01 09:46:22.454 4945 4945 W System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 01-01 09:46:22.454 4945 4945 W System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 01-01 09:46:22.455 4945 4945 F chromium: [FATAL:jni_android.cc(236)] Please include Java exception stack in crash report

简单分析,可以看出是DropdownPopupWindow中发生空指针异常,而整个页面中native代码未曾使用popupWindow.
搜索过很多帖子以后,在github#issues中找到了答案。原来是html中文本输入框自动补全导致的,据说是Android5.0的一个已知bug.

解决方案如下

Html中输入框的代码类似如下

 <input type="text" name="symbols" />

而input控件属性 autocomplete 默认为 “on”,所以以上代码等效于

<input type="text" name="symbols" autocomplete="on" />

自动补全不知道出于何种原因,会触发显示DropdownPopupWindow,进而CRASH. 所以把html中的输入框全部设为如下格式即可。

<input type="text" name="symbols" autocomplete="off" />

github地址

https://github.com/jquery/jquery-mobile/issues/5115

0 0