html文件 (js)

将html文件放到main下 assts资源文件中

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <script type="text/javascript">
    function androidCallJs(arg){
         document.getElementById("content").innerHTML =  ("欢迎:"+arg );
           alert("javascript弹窗");
    }
    </script>
</head>
<body>
<div align="left" id="content">冲冲冲</div>
<div align="right">冲冲冲</div>
<input type="button" value="点击调用android事件吐司" onclick="window.Android.showToast()"/>
<input type="button" value="点击调用android事件吐司再调用js中的androidCallJs方法" onclick="window.Java.showToast()"/>
</body>
</html>

android 代码

public class MainActivity extends Activity {
    WebView webView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initWebView();
        //设置支持js调用java
        webView.addJavascriptInterface(new AndroidAndJSInterface(), "Android");
        webView.addJavascriptInterface(new AndroidAndJSInterface2(), "Java");
    }


    private void initWebView() {
        webView = new WebView(this);
        //设置WebChromeClient实现各种内容渲染-js的弹框需要
        webView.setWebChromeClient(new WebChromeClient());
        webSettings.setAllowFileAccess(true);
        webSettings.setAllowFileAccessFromFileURLs(true);
        webSettings.setAllowUniversalAccessFromFileURLs(true);
        
        WebSettings webSettings = webView.getSettings();
        //设置支持javaScript脚步语言
        webSettings.setJavaScriptEnabled(true);
        //支持双击-前提是页面要支持才显示
        webSettings.setUseWideViewPort(true);

        //支持缩放按钮-前提是页面要支持才显示
        webSettings.setBuiltInZoomControls(true);
        //设置客户端-不跳转到默认浏览器中
        webView.setWebViewClient(new WebViewClient());
        //加载网络资源/本地资源
        webView.loadUrl("file:///android_asset/a.html");
        //显示页面
        setContentView(webView);
    }


    private void login() {
        //调用js的androidCallJs(String)的方法
        webView.loadUrl("javascript:androidCallJs('android调用')");
    }

    class AndroidAndJSInterface {
        @JavascriptInterface
        public void showToast() {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    //被js调用 吐司
                    Toast.makeText(MainActivity.this, "Android:showToast()被js调用了", Toast.LENGTH_SHORT).show();
                }
            });

        }
    }

    class AndroidAndJSInterface2 {
        @JavascriptInterface
        public void showToast() {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    //被js调用  在调用js方法
                    login();
//                    Toast.makeText(MainActivity.this, "JS按钮调用android:showToast()->android 调用jsjavaCalljs方法", Toast.LENGTH_SHORT).show();

                }
            });
        }
    }
}

项目地址

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐