我使用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代码是正确的,但浏览器窗口不会滚动。焦点仍然在页面顶部。
答案 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();
}
此外,您确定该元素在执行时是否存在?