Android 在WebView上自定义所有错误页面
我的WebView应用程序有一些问题。Android 在WebView上自定义所有错误页面,android,redirect,webview,custom-error-pages,Android,Redirect,Webview,Custom Error Pages,我的WebView应用程序有一些问题。 我想为所有可能的错误页面(如连接丢失、服务器超时等)定制一个可在应用程序中脱机使用的错误页面 因此,这意味着如果出现任何问题,webview中将重定向到脱机页面。 我不想在超时或Internet连接丢失之间做出不同,我只想将所有可能的web错误重定向到脱机站点。 可能吗 我只想将所有可能的web错误重定向到脱机站点 我认为如果发生任何错误,您需要一个自定义的WebView类来进行URL重定向 MainActivity.java /* ... */ publ
我想为所有可能的错误页面(如连接丢失、服务器超时等)定制一个可在应用程序中脱机使用的错误页面 因此,这意味着如果出现任何问题,webview中将重定向到脱机页面。
我不想在超时或Internet连接丢失之间做出不同,我只想将所有可能的web错误重定向到脱机站点。 可能吗 我只想将所有可能的web错误重定向到脱机站点 我认为如果发生任何错误,您需要一个自定义的
WebView
类来进行URL重定向
MainActivity.java
/* ... */
public class MainActivity extends AppCompatActivity {
MyWebView mWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mWebView = (MyWebView) findViewById(R.id.web_view);
mWebView.loadUrl("https://www.google.com/");
}
}
/* ... */
public class MyWebView extends WebView {
public MyWebView(Context context) {
super(context);
initView(context);
}
public MyWebView(Context context, AttributeSet attrs) {
super(context, attrs);
initView(context);
}
@SuppressLint("SetJavaScriptEnabled")
private void initView(Context context){
this.getSettings().setJavaScriptEnabled(true) ;
this.getSettings().setUseWideViewPort(true);
this.getSettings().setLoadWithOverviewMode(true);
this.getSettings().setDomStorageEnabled(true);
this.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedError(final WebView view, int errorCode, String description,
final String failingUrl) {
MyWebView.this.loadUrl("file:///android_asset/error.html");
}
@TargetApi(Build.VERSION_CODES.M)
@Override
public void onReceivedError(WebView view, WebResourceRequest req, WebResourceError errorResponse) {
MyWebView.this.loadUrl("file:///android_asset/error.html");
}
});
}
}
activity\u main.xml
<!-- ... -->
<your_package_name.MyWebView
android:id="@+id/web_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<!-- ... -->
记住把你的
error.html
放在app/src/main/assets
里面,你可以把error.html
放在你的离线网站上,它可以在线(有互联网)和离线(没有互联网)使用。两个州都可以成功打开error.html
。我已经放弃设置使用Internet连接的权限。;)