Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- notification
- lifecycle
- View
- hilt
- Algorithm
- ViewModel
- 알고리즘
- 코틀린
- 알림
- CoordinatorLayout
- Android
- LiveData
- 안드로이드
- onLayout
- activity
- DataBinding
- AppBarLayout
- BOJ
- Behavior
- 백준
- sqlite
- Coroutine
- CollapsingToolbarLayout
- recyclerview
- Navigation
- onMeasure
- room
- HTTP
- CustomView
- kotlin
Archives
- Today
- Total
개발일지
Android in A..Z - WebView Bridge 본문
Bridge
Android에서 WebView를 통해 Android와 Web간의 통신을 도와주는 기능이다. WebView에 addJavascriptInterface 기능을 통해 JavaScript 구문을 넣을 수 있으며, loadUrl 기능을 통해 JavaScript 구문을 실행할 수 있다.
WebView
주의 사항 : 같은 이름으로 Bridge를 추가한 경우 기존의 Bridge가 제거된다.
@SuppressLint("SetJavaScriptEnabled")
class JavaScriptWebView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0, defStyleRes: Int = 0) : WebView(context, attrs, defStyleAttr, defStyleRes) {
private var isLoading = true
private var callback: ((html: String) -> Unit)? = null
init {
settings.javaScriptEnabled = true
webChromeClient = WebChromeClient()
webViewClient = object : WebViewClient() {
override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
super.onPageStarted(view, url, favicon)
isLoading = true
}
override fun onPageFinished(view: WebView?, url: String?) {
super.onPageFinished(view, url)
isLoading = false
}
}
addJavascriptInterface(object {
@JavascriptInterface
fun getHTMLCode(html: String) {
Log.d(TAG, "getHTMLCode : $html")
callback?.invoke(html)
}
}, "Bridge")
}
fun postGetHTMLCode(callback:(html: String) -> Unit) {
if (isLoading) {
Toast.makeText(context, "Loading try later", Toast.LENGTH_SHORT).show()
return
}
this.callback = callback
loadUrl("javascript:window.Bridge.getHTMLCode(document.getElementsByTagName('html')[0].innerHTML);")
}
}
- settings.javaScriptEnabled : WebView에서 JavaScript 사용을 허용한다.
- WebChromeClient : 경고, 창닫기 등 브라우저 기능에 대한 함수들이 있다.
- WebViewClient : 현재 페이지에서 일어나는 변동 사항을 알려주는 함수들이 있다. (웹 페이지 가로채기 등 다양한 기능을 수행할 수 있다.)
- addJavascriptInterface : WebView에 JavaScript를 추가하는 함수이다. Class와 Name을 추가하는데 Class에서 @JavascriptInterface 붙은 함수만 추가된다.
- loadUrl : URL을 불러오는 함수, `javascript:`를 통해서 JavaScript를 실행할 수 있다. (Bridge라는 이름의 Class로 getHTMLCode함수를 추가했으므로 window.Bridge.getHTMLCode를 호출한다.
Git (예제코드)
https://github.com/KangTaeJong98/Example/tree/main/Android/Bridge
'Android (안드로이드)' 카테고리의 다른 글
Android in A..Z - Intent (0) | 2021.08.30 |
---|---|
Android In A..Z - Google API (Google Map) (0) | 2021.08.18 |
Android in A..Z - Flow (0) | 2021.08.05 |
Android in A..Z - Context (0) | 2021.08.05 |
Android in A..Z - Constraint Layout (0) | 2021.08.04 |
Comments