HTML预览jar,从JAR加载HTML-Loading HTML from JAR

JxBrowser允许通过URL,本地HTML文件和String加载HTML。通常,诸如HTML文件之类的Java应用程序资源位于包含在应用程序类路径中的JAR存档中。为了能够加载位于JAR存档内的资源,您必须使用以下实现注册自定义ProtocolHandler:

```

BrowserContext browserContext = browser.getContext();

ProtocolService protocolService = browserContext.getProtocolService();

protocolService.setProtocolHandler("jar", new ProtocolHandler() {

@Override

public URLResponse onRequest(URLRequest request) {

try {

URLResponse response = new URLResponse();

URL path = new URL(request.getURL());

InputStream inputStream = path.openStream();

DataInputStream stream = new DataInputStream(inputStream);

byte[] data = new byte[stream.available()];

stream.readFully(data);

response.setData(data);

String mimeType = getMimeType(path.toString());

response.getHeaders().setHeader("Content-Type", mimeType);

return response;

} catch (Exception ignored) {}

return null;

}

});

```

所述getMimeType()方法返回给定的资源扩展适当mime类型:

```

private static String getMimeType(String path) {

if (path.endsWith(".html")) {

return "text/html";

}

if (path.endsWith(".css")) {

return "text/css";

}

if (path.endsWith(".js")) {

return "text/javascript";

}

return "text/html";

}

```

您可以使用其他扩展和mime类型扩展此方法。

注册ProtocolHandler并定义支持的mime类型后,可以使用标准Java和JxBrowser API从JAR存档加载资源。例如:

```

browser.loadURL(getClass().getResource("index.html").toString());

```

您可以在下面找到完整示例:

```

import com.teamdev.jxbrowser.chromium.*;

import com.teamdev.jxbrowser.chromium.swing.BrowserView;

import javax.swing.*;

import java.awt.*;

import java.io.DataInputStream;

import java.io.InputStream;

import java.net.URL;

public class ProtocolHandlerSample {

public static void main(String[] args) {

final Browser browser = new Browser();

BrowserView view = new BrowserView(browser);

JFrame frame = new JFrame();

frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

frame.add(view, BorderLayout.CENTER);

frame.setSize(700, 500);

frame.setLocationRelativeTo(null);

frame.setVisible(true);

BrowserContext browserContext = browser.getContext();

ProtocolService protocolService = browserContext.getProtocolService();

protocolService.setProtocolHandler("jar", new ProtocolHandler() {

@Override

public URLResponse onRequest(URLRequest request) {

try {

URLResponse response = new URLResponse();

URL path = new URL(request.getURL());

InputStream inputStream = path.openStream();

DataInputStream stream = new DataInputStream(inputStream);

byte[] data = new byte[stream.available()];

stream.readFully(data);

response.setData(data);

String mimeType = getMimeType(path.toString());

response.getHeaders().setHeader("Content-Type", mimeType);

return response;

} catch (Exception ignored) {}

return null;

}

});

// Assume that we need to load a resource related to this class in the JAR file

browser.loadURL(ProtocolHandlerSample.class.getResource("index.html").toString());

}

private static String getMimeType(String path) {

if (path.endsWith(".html")) {

return "text/html";

}

if (path.endsWith(".css")) {

return "text/css";

}

if (path.endsWith(".js")) {

return "text/javascript";

}

return "text/html";

}

}

```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值