FULL PRODUCT VERSION :
java version "9"
Java(TM) SE Runtime Environment (build 9+181)
Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
MAC OS X 10.13.3
also affects Windows 7, others not tested
A DESCRIPTION OF THE PROBLEM :
Anchor links do not work in WebView component when HTML is loaded using the WebEngine.loadContent() method. When storing the identical HTML to a file and using WebEngine.load() with the file's URL works as expected.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Compile and run attached source code. Click on the "Introduction" link.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
WebView should scroll to the line containing the anchor #introduction.
ACTUAL -
Nothing happens.
ERROR MESSAGES/STACK TRACES THAT OCCUR :
No errors or Eceptions are reported.
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ProgressBar;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
public class Main extends Application {
public static void main(String[] args) {
launch(args);
}
private static String generateContent() {
StringBuilder sb = new StringBuilder();
sb.append("<!DOCTYPE html>\n" +
"<html lang=\"en\">\n" +
"<head>\n" +
"<meta charset=\"utf-8\">\n" +
"<p>Jump to <a href=\"#introduction\">Introduction</a></p>\n");
for (int i=1;i<100;i++) {
sb.append("Line "+i+"<br>\n");
}
sb.append("<h1 id=\"introduction\">Introduction</h1>\n");
for (int i=100;i<200;i++) {
sb.append("Line "+i+"<br>\n");
}
sb.append("</body>\n" +
"</html>\n");
return sb.toString();
}
@Override
public void start(Stage stage) throws Exception {
ScrollPane scrollPane = new ScrollPane();
WebView webView = new WebView();
WebEngine webEngine = webView.getEngine();
scrollPane.setContent(webView);
scrollPane.setFitToWidth(true);
scrollPane.setFitToHeight(true);
Scene scene = new Scene(webView);
stage.setScene(scene);
stage.show();
webEngine.loadContent(generateContent());
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
Storing HTML to a file and using WebEngine.load(URL) instead. But depending on the application, this could reuqire new permissions or introduce new vulnerabilities into the application code.
java version "9"
Java(TM) SE Runtime Environment (build 9+181)
Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
MAC OS X 10.13.3
also affects Windows 7, others not tested
A DESCRIPTION OF THE PROBLEM :
Anchor links do not work in WebView component when HTML is loaded using the WebEngine.loadContent() method. When storing the identical HTML to a file and using WebEngine.load() with the file's URL works as expected.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Compile and run attached source code. Click on the "Introduction" link.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
WebView should scroll to the line containing the anchor #introduction.
ACTUAL -
Nothing happens.
ERROR MESSAGES/STACK TRACES THAT OCCUR :
No errors or Eceptions are reported.
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ProgressBar;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
public class Main extends Application {
public static void main(String[] args) {
launch(args);
}
private static String generateContent() {
StringBuilder sb = new StringBuilder();
sb.append("<!DOCTYPE html>\n" +
"<html lang=\"en\">\n" +
"<head>\n" +
"<meta charset=\"utf-8\">\n" +
"<p>Jump to <a href=\"#introduction\">Introduction</a></p>\n");
for (int i=1;i<100;i++) {
sb.append("Line "+i+"<br>\n");
}
sb.append("<h1 id=\"introduction\">Introduction</h1>\n");
for (int i=100;i<200;i++) {
sb.append("Line "+i+"<br>\n");
}
sb.append("</body>\n" +
"</html>\n");
return sb.toString();
}
@Override
public void start(Stage stage) throws Exception {
ScrollPane scrollPane = new ScrollPane();
WebView webView = new WebView();
WebEngine webEngine = webView.getEngine();
scrollPane.setContent(webView);
scrollPane.setFitToWidth(true);
scrollPane.setFitToHeight(true);
Scene scene = new Scene(webView);
stage.setScene(scene);
stage.show();
webEngine.loadContent(generateContent());
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
Storing HTML to a file and using WebEngine.load(URL) instead. But depending on the application, this could reuqire new permissions or introduce new vulnerabilities into the application code.