美文网首页
Android与JS调用的总结

Android与JS调用的总结

作者: corffen | 来源:发表于2018-01-20 10:33 被阅读0次

    ##Android与JS调用的坑

    ###1.Android调用JS的准备工作

    `

            m_webView.getSettings().setTextSize(TextSize.LARGER);

            m_webView.getSettings().setJavaScriptEnabled(true);

            m_webView.getSettings().setDomStorageEnabled(true);

            String appCachePath = getApplicationContext().getCacheDir()

                    .getAbsolutePath();

            m_webView.getSettings().setDatabasePath(appCachePath);

            m_webView.addJavascriptInterface(this, JSINTERFACE_OBJ);

    `

    m_webView.addJavascriptInterface(this, JSINTERFACE_OBJ); 这个方法需要的最低api是17,

    在调用此方法的方法上需要加载一个注解@SuppressLint("JavascriptInterface")

    而this,通常是写一个内部类,去专门与JS交互的.

    ###2.如何查看JS的方法有没有调用成功?

    `

            @JavascriptInterface

        public void jsLOG(String log) {

            if (IS_DEBUG) {

                Log.i("HTMLDT", "js:" + log);

            }

        }

    `

    通常是在Java代码中写一个log方法,方便后面的日志查看.

    ###3.在js中如何调用Java代码?

    我们在问题1中的准备工作中,有一个JSINTERFACE_OBJ,这是为Java起的一个别名,我们在JS中调用Java代码时,可以如下:

    `

        function solve(topicID){

        EXAMWin.jsLOG("solve():" + topicID);

        var param = "#" + topicID + " [type='written by hand']";

        var obj = $(param);

        var i = 0;

        var answerA = new Array();

        ...

        省略代码

    `

    这里的EXAMWin,就是JSINTERFACE_OBJ,起的别名.

    也就是说 别名.Java方法名(参数),就可以调用Java代码了

    需要注意的是Java代码方法头上必须要有注解@JavascriptInterface

    这个比较坑,为了统一规范,Java上的方法以js开头.

    ###4.Java如何调用JS方法?

    封装一个方法去调用JS方法如下:

    `

            private void CallJs(String method, String param) {

            StringBuffer jsParam = new StringBuffer();

            jsParam.append("javascript:");

            jsParam.append(method);

            jsParam.append("(");

            jsParam.append(param);

            jsParam.append(")");

            m_webView.loadUrl(jsParam.toString());

        }

    `

    其实就是调用m_webView.loadUrl("javascript:方法名("+方法参数+")");

    要注意的是在调用上面的方法之前,webView还必须先加载了一个HTML文件

    m_webView.loadUrl(m_paperPath);这里的m_paperPath,是自己拼接的一个HTML文件.

    ###5.js调用Java方法,Java方法是一个回调方法时

    `

         @JavascriptInterface

        public void selectionChanged(final String range, final String text, final String handleBounds, final String menuBounds){

            if(this.listener != null) {

                mHandler.post(new Runnable() {

                    @Override

                    public void run() {

                        listener.tsjiSelectionChanged(range, text, handleBounds, menuBounds);

                    }

                });

            }

        }

    `

    需要使用Handler去调用post方法,直接调用listener.tsjiSelectionChanged(range, text, handleBounds, menuBounds);

    此方法可能会导致,JS调用失效.

    ###6.查看调用JS日志的小技巧

    其实也通用Android日志查看.

    adb shell

    然后 logcat -s TAG

    这里的TAG,就是我们的log标签,注意不需要添加引号

    相关文章

      网友评论

          本文标题:Android与JS调用的总结

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