참고자료 : https://developer.android.com/guide/webapps/webview?hl=ko
1. Local HTML파일 불러오기
https://developerpearl.tistory.com/63
2. Javascript 인터페이스 테스트
WEBView에서 javascript를 사용해보자!!
* 자바스크립트에 결합된 객체는 객체가 생성된 스레드가 아닌 다른 스레드에서 실행된다.
* 보안 문제를 인지하자.
1. webView 세팅 javascriptEnabled = true
myWebView.settings.javaScriptEnabled=true
이외에도 settings를 활용하면 다양하고 유용한 기타 설정에 액세스할 수 있습니다
2. WebAppInterface정의
class WebAppInterface(private val mContext : Context) {
// 웹에서 안드로이드 toastmessage 띄우기!!?
@JavascriptInterface
fun showToast(toast:String){
Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show()
}
}
3. addJavascriptInterface
myWebView.addJavascriptInterface(WebAppInterface(this), "Android")
// name("Android")으로 javascript내에서 해당 인터페이스를 불러오게된다.
테스트 성공~
* Javascript로 안드로이드 API를 다루어 봤다. 웬만하면, 동일 서비스의 android, web버전 사이에서 사용될 것 같다.
XSS 취약점이 있을 수 있다고 한다.(웹사이트 관리자가 아닌 이가 웹 페이지에 악성 스크립트를 삽입할 수 있는 취약점이다.)
필독사항(구현도 중요하지만, 사용할 때와 아닐 때를 구분하는게 더 중요한듯..)
주의: addJavascriptInterface()를 사용하면 자바스크립트가 Android 앱을 제어할 수 있게 됩니다. 이는 유용한 기능일 수 있지만 동시에 위험한 보안 문제가 될 수 있습니다. WebView에 포함된 HTML이 신뢰할 수 없는 HTML인 경우(예: HTML의 일부 또는 전체가 알 수 없는 사람이나 프로세스에 의해 제공된 경우) 공격자가 클라이언트 측 코드와 공격자가 선택한 모든 코드를 실행하는 HTML을 포함할 수 있습니다. 따라서 개발자는 WebView에 표시되는 HTML 및 자바스크립트를 모두 작성한 경우가 아니면 addJavascriptInterface()를 사용해서는 안 됩니다. 또한 사용자에게WebView 내에서 개발자 소유가 아닌 다른 웹페이지로 이동하도록 허용해서는 안 됩니다. 대신 사용자의 기본 브라우저 애플리케이션에서 외부 링크를 열 수 있도록 허용합니다. 기본적으로 사용자의 웹브라우저는 모든 URL 링크를 엽니다. 따라서 위 섹션에서 설명한 것처럼 페이지 탐색을 처리하는 경우에만 주의합니다.
'안드로이드' 카테고리의 다른 글
[안드로이드] Thread간 통신 예제 - 실행 시간 표시 (1) | 2023.03.29 |
---|---|
[안드로이드] Thread, Thread간 통신/ Handler, Looper의 개념 (0) | 2023.03.21 |
[안드로이드] 2-1. WebView 웹뷰 - 로컬 HTML불러오기 (Kotlin) (0) | 2023.03.11 |
[안드로이드] 1. WebView 웹뷰- 띄우기 (Kotlin) (0) | 2023.03.11 |
[안드로이드] Permission - 권한 허용 요청(requestPermissions)(feat. Kotlin) (0) | 2023.01.27 |
댓글