Android如何内嵌WebView并防止出现ERR_CONNECTION_TIMED_OUT情况方法
首先需要在Android res/layout文件夹下使用内嵌WebView的布局xml文件中做如下定义:
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/textViewUrl"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:text="https://xxx.com"
android:layout_centerInParent="true"/>
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
将WebView全屏铺满,设置一个TextView给出默认加载的网址,注意,这里需要是https协议。
在Activity中,做如下定义:
public class MainActivity extends AppCompatActivity {
private TextView textViewUrl;
private WebView webView;
public class WebViewClientDemo extends WebViewClient {
// 在 WebView 中而不是默认浏览器中显示页面
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.startsWith("http://") || url.startsWith("https://")) {
view.loadUrl(url);
return false;
} else {
// 如果不是http开头的地址,就是走这里。
try {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
MainActivity.this.startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
}
return true;
}
}
}
public void initView() {
textViewUrl = findViewById(R.id.textViewUrl);
webView = findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl(textViewUrl.getText().toString());
webView.setWebViewClient(new WebViewClientDemo());
WebSettings settings = webView.getSettings();
settings.setDomStorageEnabled(true); // 开启DOM
String ua = settings.getUserAgentString(); // 防止出现目标服务器对客户端的ERR_CONNECTION_TIMED_OUT情况
settings.setUserAgentString(ua+ "" + "Android");
}
}
我们给WebView实例设置一个自定义的WebViewClient,用于加载http、https和其他协议开头的网址。尤其要注意的是需要开启Dom和设置客户端名称,便于WEB端统计分析,需要将APP的user-agent作特征标记,其中ua+ “” + "Android"中的Android可以自定义;否则会出现ERR_CONNECTION_TIMED_OUT内嵌WebView不加载网页的情况。
本文介绍了如何在Android应用中内嵌WebView,并提供防止ERR_CONNECTION_TIMED_OUT错误的方法,包括设置WebViewClient、启用DOM存储和定制user-agent。



4980

被折叠的 条评论
为什么被折叠?



