将SWT浏览器滚动到特定元素

时间:2015-11-29 08:59:34

标签: java browser swt

我使用SWT的浏览器组件和setText()方法在我的应用程序中查看HTML文件。
现在我想将窗口滚动到当前页面中的特定元素 HTML文档包含一些标题,一些段落和图形 在这种情况下,要滚动到的元素是标题的id(h1 ... h6)。

我使用" embedded"构建了以下方法。执行此任务的JavaScript代码:

public static String scrollToElement(String id) {
  StringBuilder builder = new StringBuilder();
  builder.append("var elem = document.getElementById('" + id + "');");
  builder.append("if (!!elem && elem.scrollIntoView) {");
  builder.append("  elem.scrollIntoView();");
  builder.append("}");
  return builder.toString();
}

boolean b = browser.execute(JavaScriptBuilder.scrollToElement("headingID1"));

该方法返回true,因此我认为JS代码是正确的,但浏览器窗口不会滚动。焦点仍然在页面顶部。

1 个答案:

答案 0 :(得分:0)

您的JavaScript似乎是正确的并且对我有用,但可能会尝试将其简化为:

document.getElementById('myId').scrollIntoView();

以下是一个例子:

public static void main(String[] args) {
    Display display = new Display();
    Shell shell = new Shell(display);
    shell.setLayout(new FillLayout());

    Browser browser = new Browser(shell, SWT.NONE);

    browser.setText("<div style='height: 500px;'></div><div id='myId'>TEST</div>");

    display.timerExec(1000, () -> {
        System.out.println(browser.execute("document.getElementById('myId').scrollIntoView();"));
    });

    shell.pack();
    shell.setSize(400, 300);
    shell.open();

    while (!shell.isDisposed()) {
        if (!display.readAndDispatch()) {
            display.sleep();
        }
    }

    display.dispose();
}

此外,您确定该元素在执行时是否存在?

相关问题