Я экспериментирую с элементом управления JavaFX WebView
, и я хочу использовать библиотеку Javascript MathJax для рендеринга математического контента.JavaFX WebView загрузить локальный файл Javascript
В качестве теста я создал базовый проект JavaFX FXML, добавил WebView
к FXML и обновил код контроллера так:
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");
}
}
Файл HTML выглядит следующим образом:
<!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>
Это работает как ожидалось и дает следующий результат:
Обратите внимание, что для теста оба пути файлов html и JavaScript жестко закодированы в местах на моем жестком диске, поэтому следующим шагом является упаковка html в качестве ресурса, который поставляется вместе с приложением, так что он не ищет локальные файлы.
Я обновил код контроллера, чтобы просмотреть страницу, подобную этой (html не был изменен).
@Override
public void initialize(URL url, ResourceBundle rb) {
webView.getEngine().load(
this.getClass().getResource("Page.html").toExternalForm());
}
, но это не дает следующий результат:
Как вы можете видеть, математическое содержание больше не отображается.
Если я изменяю тэг html <script>
, чтобы ссылаться на JavaScript из CDN, то все работает как в исходном примере, но я хотел бы иметь возможность ссылаться на локальный файл JavaScript (и, в конечном итоге, версию, связанную с заявление).
Является ли то, что я пытаюсь достичь, возможно?