2013-09-29 6 views
7

Я экспериментирую с элементом управления 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> 

Это работает как ожидалось и дает следующий результат:

enter image description here

Обратите внимание, что для теста оба пути файлов html и JavaScript жестко закодированы в местах на моем жестком диске, поэтому следующим шагом является упаковка html в качестве ресурса, который поставляется вместе с приложением, так что он не ищет локальные файлы.

Я обновил код контроллера, чтобы просмотреть страницу, подобную этой (html не был изменен).

@Override 
public void initialize(URL url, ResourceBundle rb) { 
    webView.getEngine().load(
     this.getClass().getResource("Page.html").toExternalForm()); 
} 

, но это не дает следующий результат:

enter image description here

Как вы можете видеть, математическое содержание больше не отображается.

Если я изменяю тэг html <script>, чтобы ссылаться на JavaScript из CDN, то все работает как в исходном примере, но я хотел бы иметь возможность ссылаться на локальный файл JavaScript (и, в конечном итоге, версию, связанную с заявление).

Является ли то, что я пытаюсь достичь, возможно?

ответ

7

Добавить в MathJax.js файл в том же пакете/папке page.html затем ссылаться на него как

<script type="text/javascript" 
     src="MathJax.js?config=TeX-AMS-MML_HTMLorMML"> 
</script> 
Смежные вопросы