代码之家  ›  专栏  ›  技术社区  ›  SedJ601

使用prism.js在WebView中显示HTML

  •  2
  • SedJ601  · 技术社区  · 6 年前

    我在表演上有困难 HTML 在里面 JavaFX WebVew 使用 Prism.js . 我能成功地展示 Java 例如,但是 HTML 示例似乎希望在访问站点时显示HTML,而不仅仅是显示语法字符串。正确的展示方式是什么 HTML 在里面 JavaFX WebView 使用 Prim.JS ?

    Java示例(正确显示)

    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"
                    + "</pre>\n"
                    + "</body>\n"
                    + "</html>";
    
            WebView webView = new WebView();
            WebEngine engine = webView.getEngine();
            engine.setJavaScriptEnabled(true);
            engine.loadContent(htmlString);
    
            StackPane root = new StackPane(webView);
    
            Scene scene = new Scene(root, 500, 400);
    
            primaryStage.setTitle("Hello World!");
            primaryStage.setScene(scene);
            primaryStage.show();
        }
    
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args)
        {
            launch(args);
        }
    
    }
    

    enter image description here

    HTML示例(显示不正确)

    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"
                    + "</pre>\n"
                    + "</body>\n"
                    + "</html>";
    
            WebView webView = new WebView();
            WebEngine engine = webView.getEngine();
            engine.setJavaScriptEnabled(true);
            engine.loadContent(htmlString);
    
            StackPane root = new StackPane(webView);
    
            Scene scene = new Scene(root, 500, 400);
    
            primaryStage.setTitle("Hello World!");
            primaryStage.setScene(scene);
            primaryStage.show();
        }
    
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args)
        {
            launch(args);
        }
    
    }
    

    enter image description here

    预期产量

    enter image description here

    Java:1.8 0171

    Prim.JS下载图片中也有Java选择

    enter image description here

    1 回复  |  直到 6 年前
        1
  •  2
  •   Guest 21    6 年前

    HTML代码需要首先转义(以便可以以纯文本的形式显示)。

    看到这个 question ,两种解决方案都有效:

    htmlStringPreCode = htmlStringPreCode.replace("<", "&lt;");
    
    //or
    
    htmlStringPreCode = "<script type=\"prism-html-markup\">" + htmlStringPreCode + "</script>";