zoukankan      html  css  js  c++  java
  • webview和js交互

    public class WebViewDemo extends Activity {
    
        private static final String LOG_TAG = "WebViewDemo";
    
        private WebView mWebView;
    
        private Handler mHandler = new Handler();
    
        @Override
        public void onCreate(Bundle icicle) {
            super.onCreate(icicle);
            setContentView(R.layout.main);
            mWebView = (WebView) findViewById(R.id.webview);
    
            WebSettings webSettings = mWebView.getSettings();
            webSettings.setSavePassword(false);
            webSettings.setSaveFormData(false);
            webSettings.setJavaScriptEnabled(true);
            webSettings.setSupportZoom(false);
    
            mWebView.setWebChromeClient(new MyWebChromeClient());
    
            mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), "demo");
    
            mWebView.loadUrl("file:///android_asset/demo.html");
        }
    
        final class DemoJavaScriptInterface {
    
            DemoJavaScriptInterface() {
            }
    
            /**
             * This is not called on the UI thread. Post a runnable to invoke
             * loadUrl on the UI thread.
             */
            public void clickOnAndroid() {
                mHandler.post(new Runnable() {
                    public void run() {
                        mWebView.loadUrl("javascript:wave()");
                    }
                });
    
            }
        }
    
        /**
         * Provides a hook for calling "alert" from javascript. Useful for
         * debugging your javascript.
         */
        final class MyWebChromeClient extends WebChromeClient {
            @Override
            public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
                Log.d(LOG_TAG, message);
                result.confirm();
                return true;
            }
        }
    }


    demo.html
    <html>
        <script language="javascript">
            /* This function is invoked by the activity */
            function wave() {
                alert("1");
                document.getElementById("droid").src="android_waving.png";
                alert("2");
            }
        </script>
        <body>
            <!-- Calls into the javascript interface for the activity -->
            <a onClick="window.demo.clickOnAndroid()"><div style="80px;
                margin:0px auto;
                padding:10px;
                text-align:center;
                border:2px solid #202020;" >
                    <img id="droid" src="android_normal.png"/><br>
                    Click me!
            </div></a>
        </body>
    </html>


    ①android如何调用js。
    调用形式:
    mWebView.loadUrl("javascript:wave()");加载js中的wave()方法

    ②js如何调用android。
    调用形式:
    <a onClick="window.demo.clickOnAndroid()">

    代码中的“demo”是在android中指定的调用名称,即
    mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), "demo");

    代码中的clickOnAndroid()是“demo”对应的对象:new DemoJavaScriptInterface() 中的一个方法。

    ③双向交互。



  • 相关阅读:
    Docker-Compose搭建单体SkyWalking 6.2
    Docker搭建MySQL主从集群,基于GTID
    【简记】修改Docker数据目录位置,包含镜像位置
    【拆分版】Docker-compose构建Kibana单实例,基于7.1.0
    【拆分版】Docker-compose构建Logstash多实例,基于7.1.0
    【拆分版】Docker-compose构建Zookeeper集群管理Kafka集群
    命令行模式和python交互模式
    详解 HTTPS、TLS、SSL、HTTP区别和关系
    windows下如何查看进程、端口占用、杀死进程教程
    pycharm最常用的快捷键总结
  • 原文地址:https://www.cnblogs.com/wwccyy66/p/6194952.html
Copyright © 2011-2022 走看看