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

时间:2013-07-29 22:32:38

标签: android android-webview

我正在尝试在Android中使用WebView加载网页,然后一个接一个地运行几个JavaScripts。为此,我尝试使用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停止)。

我不确定这是否正确,因为我甚至不知道JavaScripts是否实际上调用了onPageFinished函数,我想知道这样做的正确方法。

2 个答案:

答案 0 :(得分:1)

所以我找到了一个简单的解决方案。 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>');");

答案 1 :(得分:0)

过程1:只需从一个JavaScript函数的最后一行(如果没有返回类型)调用它到另一个Function,并且只调用第一个function,它将自动调用一个脚本完成。

流程2:webview.loadData();多次使用此方法,在执行onFinish();时将脚本推送到网页。