gpt4 book ai didi

android - 使用 WebView (Android) 一个接一个地运行 JavaScripts

转载 作者:行者123 更新时间:2023-11-29 01:51:13 25 4
gpt4 key购买 nike

我正在尝试在 Android 中使用 WebView 加载网页,然后一个接一个地运行多个 JavaScript。为此,我尝试使用 onPageFinished 函数在前一个脚本完成后开始运行脚本。但是,该函数似乎只被调用了一次。这是我的代码:

public class MyWebViewClient extends WebViewClient {
private int state;
private WebView webView;

private String[] urls = new String[4];

public MyWebViewClient(WebView webView, HtmlSelectComponent component) {
this.webView = webView;

this.state = 0;
String option = String.valueOf(component.getOption());
this.urls[0] = "http://my.web.site/page.aspx";
this.urls[1] = "javascript:document.getElementById('" + component.getId() + "').value='" + option + "';";
this.urls[2] = "javascript:(function() {__doPostBack('" + component.getName() + "','');})()";
this.urls[3] = "javascript:window.HTMLOUT.showHTML('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');"; // Obtain the HTML code
webView.loadUrl(urls[0]);
}

@Override
public void onPageFinished(WebView view, String url)
{
state++;
if(state == 4)
return; // End of the scripts
webView.loadUrl(this.urls[state]);
}
}

HtmlSelectComponent 是一个包含组件(下拉列表)名称、ID 和所选选项的类。

正在发生的事情是页面正在显示并且 onPageFinished 仅被调用一次(“state”变量以值 1 停止)。

我不确定这是否正确,因为我什至不知道 JavaScript 是否真的调用了 onPageFinished 函数,我想知道执行此操作的正确方法。

最佳答案

所以我找到了一个简单的解决方案。 JavaScripts 不调用 onPageFinished();除非它们导致页面重新加载。因此,为了一个接一个地运行多个脚本,我只是将它们全部放在一行中,用这样的半列分隔:

webView.loadUrl("javascript:document.getElementById('" + component.getId() + "').value='" + option + "';(function() {__doPostBack('" + component.getName() + "','');})();javascript:window.HTMLOUT.showHTML('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');");

关于android - 使用 WebView (Android) 一个接一个地运行 JavaScripts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17935353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com