쪼렙 as! 풀스택

Android Webview 에서 javascript window 객체에 접근해, 네이티브 기능 실행하기 본문

개발 일지/iOS & Android

Android Webview 에서 javascript window 객체에 접근해, 네이티브 기능 실행하기

코코앱 2021. 1. 31. 10:46

안드로이드 웹뷰에서, 

window 객체를 통해

안드로이드 네이티브 함수를 호출 할 수 있다.

 

MainActivity.kt ...

class MainActivity : AppCompatActivity() {
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    val webView = findViewById<WebView>(R.id.webview)

    val settings = webView.settings;
    settings.javaScriptEnabled = true
    settings.javaScriptCanOpenWindowsAutomatically = true
    settings.allowContentAccess = true
    settings.mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW
    webView.loadUrl("https://MY_URL.COM")
    webView.addJavascriptInterface(MyInterface(this), "myAndroidInterface")
  }
  
  
  class MyInterface(private val mContext: Context) {
    @JavascriptInterface
    fun toast() {
      Toast.makeText( mContext, "토ㅅ트 띄워라!!!", Toast.LENGTH_LONG).show()
    }
  }
}

 

이렇게 하면, window.myAndroidInterface 를 이용해서, 안드로이드 네이티브 기능을 호출 할 수 있다.

아래는 웹 HTML 에서, 안드로이드의 Native Toast 를 호출하는 예시이다.

<!DOCTYPE html> 
<html> 
  <head> 
    <meta charset="UTF-8"> 
    <title>웹뷰</title> 
    <script> 
      function clickButton() { window.myAndroidInterface.toast(); } 
    </script> 
  </head> 
  <body> 
    <h1>웹뷰</h1> 
    <button onclick="clickButton()" >클릭 버튼!!!!!</button> 
  </body> 
</html>

 

 

iOS 는 window 객체에 직접 접근할 수 있는 방법은 모르겟고 (없는거 같다.)

MessageHandler 를 이용해야 하는것 같다.

 

그에 대한 내용은 아래에 정리해뒀다.

iOS 하이브리드앱, Javascript 로 웹뷰에 메세지 보내기 (네이티브 코드 사용할 수 있도록)

Comments