How to add a JavaScript function in WebView and call it later from HTML upon submitting reCAPTCHA
android, android-webview, javascript, recaptcha, webview
Solution
Try injecting the script like this,
function addCode(code){
var addedScript= document.createElement('script');
addedScript.text= code;
document.body.appendChild(addedScript);}
now call the function like,
val codeToExec = "function captchaResponse (token){" +
"android.reCaptchaCallbackInAndroid(token);" +
"}";
now exec loadurl like,
webview.loadUrl("javascript:(function addCode(code){
var addedScript= document.createElement('script');
addedScript.text= code;
document.body.appendChild(addedScript);})(codeToExec));
Problem
I am adding a JavaScript function in WebView like this (Kotlin): ``` val webView = findViewById(R.id.webview) as WebView webView.getSettings().setJavaScriptEnabled(true) webView.addJavascriptInterface(this, "android") webView.getSettings().setBuiltInZoomControls(false) webView.loadUrl(url) webView.webViewClient = object : WebViewClient() { override fun onPageFinished(view: WebView, url: String) { super.onPageFinished(view, url) webView.loadUrl("javascript:(function captchaResponse (token){" + " android.reCaptchaCallbackInAndroid(token);" + " })()") } } ``` The function works fine, but the problem is that it runs immediately, when I add it in WebView. I only want to include it as a JavaScript function and it should be called only from the HTML, when the user will fill the reCAPTCHA. How can I do that?