美文网首页
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