我的资产文件夹中有这个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()
。
就像一个魅力。