Я использую JxBrowser для загрузки HTML-файла, который находится в банке.Этот HTML-файл имеет веб-сокет, который не может подключиться (я получаю код 106 в событии onclose)
Я получаю эти ошибки от JxBrowser
09: 20: 18.381 ИНФОРМАЦИЯ:09:20:18 SEVERE: [1228 / 092018.371: ОШИБКА: validation_errors.cc (87)] Недопустимое сообщение: VALIDATION_ERROR_DESERIALIZATION_FAILED
09: 20: 18.382 INFO: 09:20:18 SEVERE: [1228 / 092018.371:ОШИБКА: render_process_host_impl.cc (4145)] Завершение процесса рендеринга для плохого сообщения Mojo: Получено неверное сообщение пользователя: Ошибка проверки для десериализатора WebSocket :: AddChannelRequest [VALIDATION_ERROR_DESERIALIZATION_FAILED]
09: 20: 182082: INFO18 SEVERE: [1228 / 092018.371: ОШИБКА: 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 не разрешает небезопасные подключения к веб-сокетам?
(Правка) Сокет подключается, когда я использую метод loadHTML JxBrowser и предоставляю текст строки HTML-файла.Поэтому я считаю, что это как-то связано с тем, что я загружаюсь с URL-адреса ресурса, а не с тем, что chrome не разрешает незащищенные соединения через веб-сокеты.Я действительно не хочу передавать содержимое файла, чтобы я мог использовать loadHTML.
(Edit2) Загрузка HTML из файла URL также работает.Я думаю, что я могу создать локальную копию файла HTML в банке и загрузить его вместо этого.Я разочарован тем, что не могу сделать это, используя URL-адрес jar, возможно, это ограничение JxBrowser.