Android 端
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.webkit.JavascriptInterface;
import android.webkit.JsPromptResult;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import butterknife.BindView;
import butterknife.OnClick;
public class WheelActivity extends Activity {
protected void initViews(Bundle savedInstanceState) {
WebSettings webSettings = webview.getSettings();
//如果访问的页面中要与Javascript交互,则webview必须设置支持Javascript
webSettings.setJavaScriptEnabled(true);
webview.addJavascriptInterface(new AndroidtoJs(),"h5toapp");//AndroidtoJS类对象映射到js的h5toapp对象
//支持插件
//webSettings.setPluginsEnabled(true);
//设置自适应屏幕,两者合用
webSettings.setUseWideViewPort(true); //将图片调整到适合webview的大小
webSettings.setLoadWithOverviewMode(true); // 缩放至屏幕的大小
//缩放操作
webSettings.setSupportZoom(true); //支持缩放,默认为true。是下面那个的前提。
webSettings.setBuiltInZoomControls(true); //设置内置的缩放控件。若为false,则该WebView不可缩放
webSettings.setDisplayZoomControls(false); //隐藏原生的缩放控件
//其他细节操作
webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); //关闭webview中缓存
webSettings.setAppCacheEnabled(true);
//开启 DOM 存储功能
webSettings.setDomStorageEnabled(true);
webSettings.setAllowFileAccess(true); //设置可以访问文件
webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
webSettings.setLoadsImagesAutomatically(true); //支持自动加载图片
webSettings.setDefaultTextEncodingName("utf-8");//设置编码格式
//不使用缓存:
// webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
webview.setWebChromeClient(new WebChromeClient() {
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
String temp = null;
}
@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
Log.i(TAG, "onJsAlert: ");
return super.onJsAlert(view, url, message, result);
}
@Override
public boolean onJsConfirm(WebView view, String url, String message, JsResult result) {
Log.i(TAG, "onJsConfirm: ");
return super.onJsConfirm(view, url, message, result);
}
@Override
public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) {
Log.i(TAG, "onJsPrompt: ");
return super.onJsPrompt(view, url, message, defaultValue, result);
}
});
webview.loadUrl(url);
webview.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.i(TAG, "shouldOverrideUrlLoading: url:" + url);
if (url.contains("http")) {
view.loadUrl(url);
return true;
}
return false;
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
}
@Override
public void onScaleChanged(WebView view, float oldScale, float newScale) {
super.onScaleChanged(view, oldScale, newScale);
}
});
ivPreVBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
}
final class AndroidtoJs extends Object{
@JavascriptInterface
public void goToSignIn() {
startActivity(new Intent(WheelActivity.this, RedActivity.class));
Log.i(TAG, "goToSignIn: JS调用了Android的goToSignIn方法");
}
@JavascriptInterface
public void goToPay() {
Log.i(TAG, "goToPay: JS调用了Android的goToPay方法");
getPayMode();
}
}
}
最关键的部分,webview.addJavascriptInterface(new AndroidtoJs(),“h5toapp”);//AndroidtoJS类对象映射到js的h5toapp对象
其中 h5toapp 在 网页的JS中要用到
网页端:
window.h5toapp.goToPay()
test.html
<!DOCTYPE html>
<html>
<head>
<title></title>
<script type="text/javascript">
function sum(a,b){
return a+b;
}
function s(){
var result =window.h5toapp.goToSignIn();
document.getElementById("p").innerHTML=result;
}
</script>
</head>
<body>
<button onclick="s()">调用本地方法</button>
<a href="file:///android_asset/test2.html">点击</a>
<p id="p"></p>
</body>
</html>
https://www.jianshu.com/p/a25907862523
https://www.jianshu.com/p/d3ee5e6f71c1
https://blog.csdn.net/qq_20451879/article/details/79136579
https://www.jianshu.com/p/3f207a8e32cb
https://blog.csdn.net/carson_ho/article/details/64904691
https://blog.csdn.net/m0_37361593/article/details/79346036
https://blog.csdn.net/qq_32320807/article/details/64441493
https://www.jianshu.com/p/345f4d8a5cfa
https://www.jianshu.com/p/b0c847dcea9c iOS与H5的交互(四种)
https://blog.csdn.net/sinat_26279817/article/details/50145827
https://blog.csdn.net/w15321970103/article/details/75635454
https://www.cnblogs.com/shiyou00/p/6874006.html
https://github.com/Carson-Ho/Webview_Cache