美文网首页
Android 与 js交互(android调用js方法)

Android 与 js交互(android调用js方法)

作者: 霍霍9527 | 来源:发表于2019-01-10 11:29 被阅读0次

    js示例代码,放在assets文件内 文件名javascript.html

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>Carson_Ho</title>
        <body>
            我是body
        </body>
        <script>
       function callJS(){
            alert("Android调用了JS的callJS方法 实现‘webView.setWebChromeClient’才有响应");
       }
        </script>
    </head>
    </html>
    

    1. 通过WebView的loadUrl()

    可以显示web界面,也可以执行web界面的js方法代码。
    传值方式:

    String url = "javascript:" + methodName + "(" + jsonParams + ");
    webView.loadUrl(url);
    

    示例:

    public class MainActivity extends AppCompatActivity {
        public static final String TAG = MainActivity.class.getSimpleName();
        WebView webview;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Toolbar toolbar = findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);
            initJs();
            FloatingActionButton fab = findViewById(R.id.fab);
            fab.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    webview.loadUrl("javascript:callJS()");//-------------------调用web界面的js方法代码
                }
            });
        }
    
        public void initJs() {
            webview = findViewById(R.id.webview);
            webview.loadUrl("file:///android_asset/javascript.html");//-------------------调用web界面
            // 由于设置了弹窗检验调用结果,所以需要支持js对话框
            // webview只是载体,内容的渲染需要使用webviewChromClient类去实现
            // 通过设置WebChromeClient对象处理JavaScript的对话框
            //设置响应js 的Alert()函数
            webview.setWebChromeClient(new WebChromeClient() {
                @Override//-------------------调用web界面的js方法代码执行回调(需要js的alert)
                public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {
                    Log.v(TAG,url + "  "+ message + "   "+ result);
                    AlertDialog.Builder b = new AlertDialog.Builder(MainActivity.this);
                    b.setTitle("Alert");
                    b.setMessage(message);
                    b.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            result.confirm();
                        }
                    });
                    b.setCancelable(false);
                    b.create().show();
                    return true;
                }
            });
        }
    }
    

    注意:JS代码调用一定要在 onPageFinished() 回调之后才能调用,否则不会调用,该回调是监听页面加载结束的。

    2. 通过WebView的evaluateJavascript()

    示例:

    fab.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
    //              //-------------------调用web界面的js方法代码,该方要求api level 19以上才可以调用
                    webview.evaluateJavascript("javascript:callJS()", new ValueCallback<String>() {
                        @Override
                        public void onReceiveValue(String value) {
                            Log.v(TAG,value);//此处为 js 返回的结果
                        }
                    });
                }
            });
    

    该方式要求api level 19 两种方式权衡使用

    相关文章

      网友评论

          本文标题:Android 与 js交互(android调用js方法)

          本文链接:https://www.haomeiwen.com/subject/fivorqtx.html