使用(上架 Google Play)
注意:为了减少您的apk包大小增量,及时动态发版解决安全隐患,X5 内核采用了后台动态下发内核的方案。由于 Google Play 禁止任何二进制代码的下发(包括so、dex、jar)和插件化技术的使用,故需要上架海外的场景请勿接入 X5 组件。
- 自定义基于原生 webview 的组件,参考代码如下:
/**
* 业务侧拓展的WebView,可自行拓展能力
*/
public class SampleWebView extends WebView {
public SampleWebView(Context context) {
super(context);
}
}
- 创建 WebViewClient,参考代码如下:
/**
* 业务侧需要的WebViewClient例子,需要可以拓展更多能力
*/
public class WebClientDemo extends DefaultTMFWebViewClient {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon){
//注意super.onPageStarted不能删除
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url) {
//注意super.onPageFinished不能删除
super.onPageFinished(view, url);
}
}
- 创建 WebChromeClient,参考代码如下:
/**
* 业务需要的WebChromeClient
*/
public class WebChromeClientDemo extends DefaultTMFWebChromeClient {
@Override
public void onProgressChanged(WebView view, int newProgress) {
//注意super.onProgressChanged不能删除
super.onProgressChanged(view, newProgress);
}
}
- 初始化 Webview 组件,参考代码如下:
/**
* 获取WebView实例
* @return
*/
private static WebView createWebView(Context context){
SampleWebView webView = new SampleWebView(context);
//config webview settings
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webView.removeJavascriptInterface("searchBoxJavaBridge_");
webSettings.setAllowContentAccess(true);
webSettings.setDatabaseEnabled(true);
webSettings.setDomStorageEnabled(true);
webSettings.setAppCacheEnabled(true);
webSettings.setSavePassword(false);
webSettings.setSaveFormData(false);
webSettings.setLoadWithOverviewMode(true);
return webView;
}
- 创建 H5 容器,参考代码如下:
ITMFWeb mWebContainer = TMFWeb.with(activity)
.setWebView(new DefaultTMFWebView(createWebView(activity)))//必须设置
.setWebViewClient(new WebClientDemo())//必须设置,须是DefaultTMFX5WebViewClient的子类
.setWebChromeClient(new WebChromeClientDemo())//必须设置,须是DefaultTMFX5WebChromeClient的子类
.setWebContainerReporter(new WebViewReporter())//设置H5容器上报器(可选)
.build();
- 将 WebView 添加到页面视图中,参考代码如下:
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
mContainer.addView((ViewGroup) mWebContainer.getWebViewHolder().getWebView(), params);
mContainer 为 xml 页面中的一个布局,如 LinearLayout、FraneLayout 等。
- 在 Activity 和 Fragment 的生命周期中管理 H5 容器,参考代码如下:
@Override
public void onResume() {
super.onResume();
if (mWebContainer != null) {
mWebContainer.onResume();
}
}
@Override
public void onStop() {
super.onStop();
if (mWebContainer != null) {
mWebContainer.onStop();
}
}
@Override
public void onPause() {
super.onPause();
if (mWebContainer != null) {
mWebContainer.onPause();
}
}
@Override
public void onDestroy() {
if (mWebContainer != null) {
mWebContainer.onDestroy();
}
super.onDestroy();
}