Android WebView загрузить HTML, затем установите переменную, затем загрузите скрипт - PullRequest
0 голосов
/ 18 июня 2019

У меня есть этот 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>

Мне нужно загрузить его в веб-просмотр, передать и установить publicKey, а затем загрузить скрипт, который использует параметр onLoad вurl.

Итак, я загружаю свой HTML в веб-просмотр и использую этот 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 и затем загружать этот скрипт.

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 20 июня 2019

Я решил это с помощью этого тега сценария:

<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-файл в веб-просмотр из файла.

Веб-просмотр использует этот WebViewClient:

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

Это ожидает загрузки html и вызывает setPublicKey(), который устанавливает ключ и загружает скрипт.

Работает как шарм.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...