美文网首页
Android与JS交互初探

Android与JS交互初探

作者: 小强开学前 | 来源:发表于2020-06-29 19:29 被阅读0次

    首先webview.settings.javaScriptEnabled = true必不可少

    1和2参考懒星人老师的博客

    1. Andriod调用JS方法
    // test为js方法
    webview.loadUrl("javascript:test()"
    
    // 直接写方法
    webview.loadUrl("javascript:(function() { document.getElementsByClassName('your_class_name')[0].style.display='none'; })()");
    
    1. JS调用Android方法
    太懒了,不写了...
    
    1. Android修改JS方法,并调用。
    // 定义js
    val injectJs = "javascript:function test(){window.alert('注入成功');}"
    // 注入js
    view?.loadUrl(injectJs)
    // 调用js方法
    view?.loadUrl("javascript:test();")
    

    注意安卓默认不让弹alert,需要重写下

    webview.webChromeClient = object :WebChromeClient(){
        override fun onJsAlert(view: WebView?, url: String?, message: String?, result: JsResult?): Boolean {
            return super.onJsAlert(view, url, message, result)
        }
    }
    
    1. Android修改JS方法,并且通过修改的JS方法调用Android方法。
    // 不用管,就这么写,foo名字随便起
    webview.addJavascriptInterface(this,"foo")
    webview.webViewClient =object :WebViewClient(){
        // 这个方法可能会调用多次
        override fun onPageFinished(view: WebView?, url: String?) {
            super.onPageFinished(view, url)
                val injectJs = "javascript:function test(){foo.androidFun('Hello World!');}"
                view?.loadUrl(injectJs)
                view?.loadUrl("javascript:test();")
        }
    }
    
    @JavascriptInterface
    fun androidFun(content:String){
        toast(content)
    }
    

    相关文章

      网友评论

          本文标题:Android与JS交互初探

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