Play Game in DOSGamePlayer App
WebView 와 APP 간에 데이터 전송 WebAPP 을 만드는 중인데 WebView 에 데이터를 보내야 할때
APP 에서 WebView 의 자바스크립트를 호출해야 할 때 WebView 에서 APP 의 함수를 호출해야 할 때를 확인해보자
App 에서 WebView 함수 호출 WebView 가 로딩되고 함수가 호출 되어야 한다 WebView Client 의 onPageFinished 를 활용해야 한다
왜냐하면 Web 페이지가 로딩이 다 되어야 함수를 호출 할 수 있는데 loadUrl 이 비동기라서 Web 페이지 로딩 여부와 상관없이 실행된다
1 2 3 4 5 6 7 8 9 10 11 val inAppHtmlUrl = "https://skyksit.com/assets/index.html" myWebView.loadUrl(inAppHtmlUrl) private class LocalContentWebViewClient (private val assetLoader: WebViewAssetLoader, private val gameUrl: String?) : WebViewClientCompat() { ... override fun onPageFinishied (view: WebView ?, url: String ?) { super .onPageFinished(view, url) view?.loadUrl("javascript:runDosGame('$gameUrl ')" ) } ... }
WebView 에서 APP 함수 호출
WebView 에서 호출할 함수를 @JavascriptInterface 만들고
webview.addJavascriptInterface 로 함수를 설정해주고
webview 에서 1번에서 만든 함수를 호출한다
1 2 3 4 5 6 7 8 9 10 11 12 override fun onCreate (savedInstanceState: Bundle ?) { ... myWebView.addJavascriptInterface(WebAppInterface(), "DosGameApp" ) ... inner class WebAppInterface (private val mContext: Context) { @JavascriptInterface fun showToast (toast: String ) { Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show() } }
1 2 3 <script> DosGameApp .showToast ("Call App Function" )</script>