首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在WebView中使用Prism.js显示HTML

在WebView中使用Prism.js显示HTML
EN

Stack Overflow用户
提问于 2019-01-07 17:42:11
回答 1查看 473关注 0票数 2

我很难用HTMLJavaFXWebVew中显示Prism.js。我能够成功地显示一个Java示例,但是HTML示例似乎想显示访问站点时显示的HTML,而不是仅仅显示语法字符串。使用Prism.jsJavaFX's WebView中显示HTML的正确方法是什么?

Java示例(正确显示)

代码语言:javascript
复制
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);
    }

}

HTML示例(未正确显示)

代码语言:javascript
复制
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);
    }

}

预期输出

Java: 1.8.0_171

图片中的Prism.js下载也选择了

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-08 08:25:18

Html代码需要首先转义(这样就可以将其显示为纯文本)。

请参阅此question,这两种解决方案都有效:

代码语言:javascript
复制
htmlStringPreCode = htmlStringPreCode.replace("<", "&lt;");

//or

htmlStringPreCode = "<script type=\"prism-html-markup\">" + htmlStringPreCode + "</script>";
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54079253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档