如何在WebView中添加JavaScript函数,并在提交reCAPTCHA后从HTML中调用它?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (206)

我在WebView中添加了一个JavaScript函数,如下所示(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);" +
                        "    })()")
    }
}

该函数运行良好,但问题是,当我在WebView中添加它时,它会立即运行。我只想将它作为JavaScript函数包含在内。只有当用户填写reCAPTCHA时,才应该从HTML调用它。我怎样才能做到这一点?

提问于
用户回答回答于
用户回答回答于

试着像这样注入脚本:

function addCode(code){
var addedScript= document.createElement('script');
addedScript.text= code;
document.body.appendChild(addedScript);}

现在调用这个函数:

val codeToExec = "function captchaResponse (token){" +
                    "android.reCaptchaCallbackInAndroid(token);" +
                    "}";

现在执行loadurl:

webview.loadUrl("javascript:(function addCode(code){
var addedScript= document.createElement('script');
addedScript.text= code;
document.body.appendChild(addedScript);})(codeToExec));

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动