Eksperymentuję z formantem JavaFX WebView
i chcę użyć biblioteki JavaScript MathJax do renderowania treści matematycznych.JavaFX WebView załadować lokalny plik JavaScript
Jako test Stworzyłem podstawowy projekt JavaFX FXML, dodał WebView
do FXML i uaktualniony kod kontroler tak:
public class SampleController implements Initializable {
@FXML
private WebView webView;
@Override
public void initialize(URL url, ResourceBundle rb) {
webView.getEngine().load(
"file:///Users/benjamin/Desktop/Page.html");
}
}
pliku HTML wygląda następująco:
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/x-mathjax-config">
MathJax.Hub.Config({tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}});
</script>
<script type="text/javascript"
src="/Users/benjamin/Downloads/mathjax/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
</script>
</head>
<body>
When $a \ne 0$, there are two solutions to \(ax^2 + bx + c = 0\) and they are
$$x = {-b \pm \sqrt{b^2-4ac} \over 2a}.$$
</body>
</html>
Działa to zgodnie z oczekiwaniami i daje następujący wynik:
Należy zauważyć, że zarówno w teście, jak i ścieżce pliku HTML i HTML są one zakodowane na twardym dysku, więc następnym krokiem jest spakowanie html jako zasobu dołączonego do aplikacji, tak aby nie szukał pliki lokalne.
Zaktualizowałem kod kontrolera, aby wyszukać stronę w ten sposób (html nie został zmieniony).
@Override
public void initialize(URL url, ResourceBundle rb) {
webView.getEngine().load(
this.getClass().getResource("Page.html").toExternalForm());
}
ale to daje następujące wyniki:
Jak widać, treść matematyczny nie jest już wydane.
Jeśli zmienię znacznik html <script>
, aby odwoływał się do JavaScript z CDN, wszystko działa tak, jak w oryginalnym przykładzie, ale chciałbym móc odwołać się do lokalnego pliku JavaScript (i ewentualnie wersji dołączonej do podanie).
Czy staram się osiągnąć to, co możliwe?