Android webview 加载 html,然后设置变量,然后加载脚本



我的资产文件夹中有这个html。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<script type="text/javascript">
        var publicKey = ""
        function setPublicKey(key) {
            publicKey = key;
            var url = '<' + 'script src="https://<my_url>?onload=loadChallenge" async defer>' + '<' + '/script>'
            document.write(url);
        }
        function loadChallenge() {
            //do some stuff using the publicKey
            new Thing( {public_key: publicKey } )
        }
     </script>
<div id="CAPTCHA"></div>
</body>
</html>

我需要将其加载到 Web 视图中,传递并设置 publicKey,然后加载在 url 中使用onLoad参数的脚本。

所以我正在将我的 html 加载到 Web 视图中并使用此 WebViewClient:

private val myWebViewClient = object : WebViewClient() {
        override fun onPageFinished(view: WebView?, url: String?) {
            view?.loadUrl("javascript:setPublicKey($publicKey)")
        }
    }

document.write(url)不起作用。 document.write("anything")不起作用。

我没有与这个解决方案结婚,我只需要一个解决方案,让我加载 html,然后设置 publicKey,然后加载该脚本。

任何帮助将不胜感激。

我用这个脚本标签解决了它:

<script type="text/javascript">
    var publicKey = ""
    function setPublicKey(key) {
        publicKey = key;
        console.log("public key: " + publicKey);
        var url = "<my_url>?onload=loadChallenge"
        var s = document.createElement('script');
        s.setAttribute('src', url);
        s.async = true;
        document.body.appendChild(s);
    }
    function loadChallenge() {
        //do some stuff using the publicKey
        new Thing( {public_key: publicKey } )
    }
 </script>

首先,我将 html 从文件加载到 Web 视图中。

Web 视图正在使用以下 WebViewClient:

private val myWebViewClient = object : WebViewClient() {
    override fun onPageFinished(view: WebView?, url: String?) {
        view?.loadUrl("javascript:setPublicKey(`$publicKey`)")
    }
}

这将等待 html 加载并调用设置键并加载脚本setPublicKey()

就像一个魅力。

最新更新