Показать HTML в WebView, используя Prism.js - PullRequest
0 голосов
/ 07 января 2019

У меня проблемы с отображением HTML в JavaFX WebVew с использованием Prism.js. Я могу успешно показать пример Java, но пример HTML, похоже, хочет показать HTML в том виде, в каком он появляется при посещении сайта, а не просто показывает строку синтаксиса. Как правильно отобразить HTML в JavaFX WebView, используя Prism.js?

Пример Java (отображается правильно)

<code>import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;

/**
 *
 * @author blj0011
 */
public class JavaFXApplication319 extends Application
{

    @Override
    public void start(Stage primaryStage)
    {
        String javaString = "/* HelloWorld.java\n"
                + " */\n"
                + "\n"
                + "public class HelloWorld\n"
                + "{\n"
                + " public static void main(String[] args) {\n"
                + "     System.out.println(\"Hello World!\");\n"
                + " }\n"
                + "}";

        String htmlString = "<!DOCTYPE html>\n"
                + "<html>\n"
                + "<head>"
                + "<link href=\"" + getClass().getResource("prism.css") + "\"" + " rel=\"stylesheet\"" + " type=\"text/css\"" + " />\n"
                + "<script src=\"" + getClass().getResource("prism.js") + "\"" + " type=\"text/javascript\"" + "></script>\n"
                + "</head>"
                + "<body>\n"
                + "\n"
                + "<h1>My First Heading</h1>\n"
                + "\n"
                + "<p>My first paragraph.</p>\n"
                + "\n"
                + "<pre>"
                + " <code class=\"language-java\">\n"
                + javaString
                + "</code>\n"
                + "
\ п» + " \ n" + ""; WebView webView = new WebView (); WebEngine engine = webView.getEngine (); engine.setJavaScriptEnabled (истина); engine.loadContent (HTMLString); StackPane root = новый StackPane (webView); Сцена сцены = новая сцена (root, 500, 400); primaryStage.setTitle («Привет, мир!»); primaryStage.setScene (сцены); primaryStage.show (); } / ** * @param args аргументы командной строки * / public static void main (аргументы String []) { запуск (арг); } }

enter image description here

Пример HTML (отображается неправильно)

<code>import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;

/**
 *
 * @author blj0011
 */
public class JavaFXApplication319 extends Application
{

    @Override
    public void start(Stage primaryStage)
    {
        String htmlStringPreCode = "<!DOCTYPE html>\n"
                + "<html>\n"
                + "<head>\n"
                + "</head>\n"
                + "<body>\n"
                + "This is a Test\n"
                + "</body>\n"
                + "</html>\n";

        String htmlString = "<!DOCTYPE html>\n"
                + "<html>\n"
                + "<head>"
                + "<link href=\"" + getClass().getResource("prism.css") + "\"" + " rel=\"stylesheet\"" + " type=\"text/css\"" + " />\n"
                + "<script src=\"" + getClass().getResource("prism.js") + "\"" + " type=\"text/javascript\"" + "></script>\n"
                + "</head>"
                + "<body>\n"
                + "\n"
                + "<h1>My First Heading</h1>\n"
                + "\n"
                + "<p>My first paragraph.</p>\n"
                + "\n"
                + "<pre>"
                + " <code class=\"language-html\">\n"
                + htmlStringPreCode
                + "</code>\n"
                + "
\ п» + " \ n" + ""; WebView webView = new WebView (); WebEngine engine = webView.getEngine (); engine.setJavaScriptEnabled (истина); engine.loadContent (HTMLString); StackPane root = новый StackPane (webView); Сцена сцены = новая сцена (root, 500, 400); primaryStage.setTitle («Привет, мир!»); primaryStage.setScene (сцены); primaryStage.show (); } / ** * @param args аргументы командной строки * / public static void main (аргументы String []) { запуск (арг); } }

enter image description here

Ожидаемый результат

enter image description here

Java: 1.8.0_171

Prism.js Для загрузки на картинке выбрана также Java

enter image description here

1 Ответ

0 голосов
/ 08 января 2019

Сначала необходимо экранировать HTML-код (чтобы его можно было отображать в виде простого текста).

См. вопрос , оба решения работают:

htmlStringPreCode = htmlStringPreCode.replace("<", "&lt;");

//or

htmlStringPreCode = "<script type=\"prism-html-markup\">" + htmlStringPreCode + "</script>";
...