【发布时间】:2018-12-28 16:42:22
【问题描述】:
我正在使用 JxBrowser 加载驻留在 jar 中的 html 文件。此 html 文件有一个连接失败的 websocket(我在 onclose 事件中收到代码 106)
我从 JxBrowser 收到这些错误
09:20:18.381 信息:09:20:18 严重:[1228/092018.371:ERROR:validation_errors.cc(87)] 无效消息:VALIDATION_ERROR_DESERIALIZATION_FAILED
09:20:18.382 信息:09:20:18 严重:[1228/092018.371:ERROR:render_process_host_impl.cc(4145)] 为错误的 Mojo 消息终止渲染进程:收到错误的用户消息:WebSocket 验证失败:: AddChannelRequest 解串器 [VALIDATION_ERROR_DESERIALIZATION_FAILED]
09:20:18.382 INFO: 09:20:18 SEVERE: [1228/092018.371:ERROR:bad_message.cc(23)] 为错误的 IPC 消息终止渲染器,原因 123
这是我创建浏览器的代码
Browser browser = new Browser();
BrowserView browserView = new BrowserView(browser);
browser.addConsoleListener(new ConsoleListener() {
@Override
public void onMessage(ConsoleEvent ce) {
System.out.println("Console log from " + ce.getSource() + " message " + ce.getMessage());
}
});
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;
}
});
URL url = getClass().getClassLoader().getResource("resources/example.html");
browser.loadURL(url.toExternalForm());
这是我的 WebSocket 代码的简化版本
this.ws = new WebSocket('ws://127.0.0.0:1337');
this.ws.onopen = () => {
console.log('OnOpen');
};
this.ws.onmessage = (evt) => {
console.log('OnMessage ' + evt.data);
};
this.ws.onerror = (event) => {
console.log('OnError');
};
this.ws.onclose = (event) => {
console.log('OnClose ' + event.code + ' ' + event.reason);
};
我很难找到有关从 Chromium 收到的错误消息的信息。会不会因为 URL 使用 jar: 协议而出现问题?或者这是一个问题,因为 chrome 不允许不安全的 websocket 连接?
(编辑)当我使用 JxBrowser 的 loadHTML 方法并提供 HTML 文件的字符串文本时,套接字连接。所以我相信这与我从资源 URL 加载这一事实有关,而不是与 chrome 不允许不安全的 websocket 连接有关。我真的不想流式传输文件内容以便我可以使用 loadHTML。
(Edit2) 从文件 URL 加载 HTML 也可以。我想我可以在 jar 中创建 HTML 文件的本地副本并加载它。我很失望我无法使用 jar URL 执行此操作,我想这可能是 JxBrowser 的限制。
【问题讨论】:
标签: javascript java websocket jxbrowser