22
33import android .os .Bundle ;
44import android .util .Log ;
5+ import android .webkit .ConsoleMessage ;
56import android .webkit .RenderProcessGoneDetail ;
67import android .webkit .WebChromeClient ;
78import android .webkit .WebSettings ;
@@ -30,42 +31,54 @@ protected void onCreate(Bundle savedInstanceState) {
3031
3132 mWebView = (WebView ) findViewById (R .id .webview_login );
3233
33- WebSettings webSettings = mWebView .getSettings ();
34- webSettings .setCacheMode (WebSettings .LOAD_DEFAULT );
35- webSettings .setGeolocationEnabled (false );
36- webSettings .setSaveFormData (false );
37- webSettings .setSavePassword (false );
38- webSettings .setJavaScriptEnabled (true ); ///------- 设置javascript 可用
39-
40- // https://stackoverflow.com/questions/9602124/enable-horizontal-scrolling-in-a-webview
41- webSettings .setLoadWithOverviewMode (true );
42- webSettings .setUseWideViewPort (true );
34+ try {
35+ WebSettings webSettings = mWebView .getSettings ();
36+ webSettings .setCacheMode (WebSettings .LOAD_DEFAULT );
37+ webSettings .setGeolocationEnabled (false );
38+ webSettings .setSaveFormData (false );
39+ webSettings .setSavePassword (false );
40+ webSettings .setJavaScriptEnabled (true ); ///------- 设置javascript 可用
41+
42+ // https://stackoverflow.com/questions/9602124/enable-horizontal-scrolling-in-a-webview
43+ webSettings .setLoadWithOverviewMode (true );
44+ webSettings .setUseWideViewPort (true );
4345// mWebView.setInitialScale(120);
4446// mWebView.getSettings().setTextZoom(200);
4547
46- //支持屏幕缩放
47- webSettings .setSupportZoom (true );
48- webSettings .setBuiltInZoomControls (true );
48+ //支持屏幕缩放
49+ webSettings .setSupportZoom (true );
50+ webSettings .setBuiltInZoomControls (true );
4951
50- // Android 16兼容性修复:启用必要的WebView功能
51- // Fix for Android 16: Enable necessary WebView features
52- webSettings .setDomStorageEnabled (true ); // 启用DOM存储,现代网页必需
53- webSettings .setDatabaseEnabled (true ); // 启用数据库存储
52+ // Android 16兼容性修复:启用必要的WebView功能
53+ // Fix for Android 16: Enable necessary WebView features
54+ webSettings .setDomStorageEnabled (true ); // 启用DOM存储,现代网页必需
55+ webSettings .setDatabaseEnabled (true ); // 启用数据库存储
5456
55- // 允许混合内容 (需要 API 21+)
56- if (android .os .Build .VERSION .SDK_INT >= android .os .Build .VERSION_CODES .LOLLIPOP ) {
57- webSettings .setMixedContentMode (android .webkit .WebSettings .MIXED_CONTENT_ALWAYS_ALLOW );
58- }
57+ // 允许混合内容 (需要 API 21+)
58+ if (android .os .Build .VERSION .SDK_INT >= android .os .Build .VERSION_CODES .LOLLIPOP ) {
59+ webSettings .setMixedContentMode (android .webkit .WebSettings .MIXED_CONTENT_ALWAYS_ALLOW );
60+ }
5961
60- // Android 16兼容性修复:确保WebView渲染器不会因为错误而白屏
61- // Fix for Android 16: Ensure WebView renderer doesn't crash
62- if (android .os .Build .VERSION .SDK_INT >= android .os .Build .VERSION_CODES .O ) {
63- webSettings .setSafeBrowsingEnabled (true );
64- }
62+ // Android 16兼容性修复:确保WebView渲染器不会因为错误而白屏
63+ // Fix for Android 16: Ensure WebView renderer doesn't crash
64+ if (android .os .Build .VERSION .SDK_INT >= android .os .Build .VERSION_CODES .O ) {
65+ webSettings .setSafeBrowsingEnabled (true );
66+ }
67+
68+ // Ensure user agent has a modern token to avoid some sites returning mobile-empty pages
69+ String ua = webSettings .getUserAgentString ();
70+ if (ua == null || !ua .contains ("Mobile" )) {
71+ webSettings .setUserAgentString (ua + " Mobile-SMTH-App" );
72+ }
73+
74+ // Only set hardware layer on API 17+ to be safe
75+ if (android .os .Build .VERSION .SDK_INT >= 17 ) {
76+ mWebView .setLayerType (android .view .View .LAYER_TYPE_HARDWARE , null );
77+ }
6578
66- // 启用硬件加速以提高性能(Android 16推荐)
67- // Enable hardware acceleration for better performance (recommended for Android 16)
68- mWebView . setLayerType ( android . view . View . LAYER_TYPE_HARDWARE , null );
79+ } catch ( Throwable t ) {
80+ Log . e ( TAG , "Exception while configuring WebView settings" , t );
81+ }
6982
7083 mWebView .setWebChromeClient (new WebChromeClient ()
7184 {
@@ -75,6 +88,12 @@ public void onProgressChanged(WebView view, int newProgress)
7588 super .onProgressChanged (view , newProgress );
7689 view .requestFocus ();
7790 }
91+
92+ @ Override
93+ public boolean onConsoleMessage (ConsoleMessage consoleMessage ) {
94+ Log .i (TAG , "Console: " + consoleMessage .message () + " -- " + consoleMessage .sourceId () + ":" + consoleMessage .lineNumber ());
95+ return super .onConsoleMessage (consoleMessage );
96+ }
7897 });
7998
8099 // 创建自定义的 WebViewClient 并添加渲染器崩溃处理
@@ -102,7 +121,16 @@ public boolean onRenderProcessGone(WebView view, RenderProcessGoneDetail detail)
102121 };
103122
104123 mWebView .setWebViewClient (webViewClient );
105- mWebView .loadUrl (url );
124+
125+ try {
126+ mWebView .loadUrl (url );
127+ } catch (Throwable t ) {
128+ Log .e (TAG , "Exception while loading URL" , t );
129+ // Show a simple fallback message instead of a white screen
130+ if (mWebView != null ) {
131+ mWebView .loadData ("<html><body><h3>加载失败,请检查网络或重试</h3></body></html>" , "text/html" , "UTF-8" );
132+ }
133+ }
106134 }
107135
108136 @ Override
0 commit comments