我正在尝试使用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为下拉列表),id和selected选项。
发生的情况是页面正在显示,并且onPageFinished仅被调用一次(“ state”变量以值1停止)。
我不确定这是否正确,因为我什至不知道JavaScript是否实际上调用了onPageFinished函数,并且我想知道执行此操作的正确方法。
最佳答案
所以我找到了一个简单的解决方案。 JavaScript不调用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>');");