javascript - javascript 完成后如何让 HtmlUnit 更新页面

标签 javascript java html htmlunit

我正在尝试加载 div 的内容,该内容在触发监听器时会发生变化。

我目前拥有的java代码是:

public static void main(String arg[]) throws IOException{
    String url = "http://localhost/chartsTest/test.html";
    WebClient wc = new WebClient();

    HtmlPage p = null;
    try {
        System.out.println("Attempting to load page: " + url);
        p = wc.getPage(url);
        System.out.println("Sucsess!");
    } catch (Exception e) {
        System.err.println("Failed to get page");
    }

    JavaScriptJobManager m = p.getEnclosingWindow().getJobManager();
    int c;
    while ((c = m.getJobCount()) > 0){
        System.out.println("Jobs: " + c);
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {}
    }

    div = p.getHtmlElementById("test");
    content = div.asText();
    System.out.println(content);

    wc.close();
}

我的 test.html 页面(加载谷歌图表)是:

<html>
<head>
    <script type="text/javascript" src="https://www.google.com/jsapi"></script>

    <script type="text/javascript">
        google.load("visualization", '1', {packages:['corechart']});
        google.setOnLoadCallback(drawChart);
        function drawChart() {

            // var query = new google.visualization.Query('simpleexample?tq=select name,population');
            // query.send(handleSimpleDsResponse);
            handleSimpleDsResponse(true);

            function handleSimpleDsResponse(response) {

                // var data = response.getDataTable();
                var data = google.visualization.arrayToDataTable([
                    ['Year', 'Sales', 'Expenses'],
                    ['2013',  1000,      400],
                    ['2014',  1170,      460],
                    ['2015',  660,       1120],
                    ['2016',  1030,      540]
                ]);


                var chart_div = document.getElementById('chart_div');
                var chart_data = document.getElementById('chart_data');
                var test = document.getElementById('test');
                var chart = new google.visualization.AreaChart(chart_div);

                // Wait for the chart to finish drawing before calling the getImageURI() method.
                google.visualization.events.addListener(chart, 'ready', function () {
                    chart_div.innerHTML = '<img src="' + chart.getImageURI() + '">';
                    chart_data.innerHTML = chart.getImageURI();
                    test.innerHTML = "after";
                });

                chart.draw(data);
            }

        }
    </script>
</head>

<body>

    <div id="test">before</div>

    <div id='chart_div'></div>

    <div id="chart_data"></div>

</body>
</html>

但是当我打印 div 时,它总是等于 before 而不是 after。如何获取图表加载完成后的值?

最佳答案

这是处理Promise.resolve()的一个错误,它已在 SVN 中修复。 .

请使用new WebClient(BrowserVersion.CHROME),并带有 latest build或快照。

不需要 wait(),因为它不是基于 AJAX 的。

关于javascript - javascript 完成后如何让 HtmlUnit 更新页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33152614/

相关文章:

javascript - 删除一个 div 时单页上多个 HighChart 的行为

javascript - emberfire 1.3.2 是否实现了 findQuery 方法?

javascript - polymer Shadow dom 元素的基于类的 CSS 样式

java - 如何忽略/跳过包含少量测试方法和 BeforeClass 和 AfterClass 方法的完整 testng 类

java - 对于给定的 JSON,pe POJO 应该是什么

Javascript - 检测表单按钮按下

javascript - 尝试停止函数上的 Interval

Javascript - 如何使用数组中的元素设置按钮的值?

java - 无法导入 EclipseLink MOXy

html - CSS向图像添加随机空白?