Android WebView执行javascript太快



在我的应用程序上,我有一系列Javascript字符串,我的类将这些字符串汇集到一个队列中,以便WebView进行评估。问题是,当我用按钮测试脚本时,它们工作得很好,但当我组合它们时,JavaScript评估得太快,而且它没有返回任何值。

到目前为止,我已经尝试了onPageFinishedThread.sleep()、信号量和postVisualStateCallback(),但都没有成功。如何让runScripts((函数等到前一行进行了任何更改后再执行?

protected fun runScripts() {
for (line in scriptsQueue) {
line?.let {
when (line) {
("wait") -> {
Thread.sleep(1000)
else -> {
driver.evaluateJavascript(line) { Log.d("webDebug", it) }
Thread.sleep(3_000)}
}
}
scriptsQueue.clear()
Log.d("scrape", "All scripts executed. Contents: $scriptsQueue")
} ```

evaluatateJavascript函数是异步的。它将完成时调用的回调作为参数。在javascript运行后,您想要做的任何事情都应该放在回调中。由于这里有N个回调,您需要等待所有N个回调都完成。最简单的方法是使用一个初始化为具有-N许可的信号量。然后在循环后等待信号灯。在每次回调中,为信号量返回1个许可。这样,当所有N个回调完成时,信号量将释放给外循环。

最新更新