jetpack compose webView的正确示范

679 阅读1分钟
//最好给他换个名字
import com.google.accompanist.web.WebView as AccompanistWebView
//这个东西设置url和头信息
val state = rememberWebViewState(url)
//用于判断当前是否是预览模式
val runningInPreview = LocalInspectionMode.current

val navigator = rememberWebViewNavigator()

AccompanistWebView(state = state, navigator = navigator, onCreated = { webView ->
    if (runningInPreview) {
        // webView.settings breaks the preview 有这东西才能让你预览起来
        return@WebView
    }
    webView.isVerticalScrollBarEnabled = false
    webView.settings.javaScriptEnabled = true
    webView.addJavascriptInterface(OnJsInterface(),"android")
}, client = object : AccompanistWebViewClient() {//熟悉的WebViewClient
    override fun onPageFinished(view: WebView?, url: String?) {
        super.onPageFinished(view, url)
    }
}, chromeClient = object : AccompanistWebChromeClient() {//熟悉的WebChromeClient
    override fun onReceivedTitle(view: WebView?, title: String?) {
        super.onReceivedTitle(view, title)
    }

    override fun onProgressChanged(view: WebView?, newProgress: Int) {
        super.onProgressChanged(view, newProgress)
    }

    override fun onShowFileChooser(webView: WebView?, filePathCallback: ValueCallback<Array<Uri>>?, fileChooserParams: FileChooserParams?): Boolean {
        return super.onShowFileChooser(webView, filePathCallback, fileChooserParams)
    }
}, onDispose = { webView ->
    //释放
    webView.removeJavascriptInterface("android")
})

//js
class OnJsInterface {
    @JavascriptInterface
    fun follow(message: String) {
        LogUtils.i("Clicked follow: $message")
    }
}

不用url的纯html代码的

  val webViewState = rememberWebViewStateWithHTMLData(
        data = "<html><head>\n" +
            "<style>\n" +
            "body {\n" +
            "  background-color: #f00;\n" +
            "}\n" +
            "</style>\n" +
            "</head><body><p>$body</p></body></html>"
    )