JxBrowser: не удалось зарегистрировать ServiceWorker
Я получаю следующую ошибку в JxBrowser, но она отлично работает в Chrome:
DOMException: Failed to register a ServiceWorker: No URL is associated with the caller's document.
Вот java-код JxBrowser и HTML-файл, который загружается в JxBrowser и javascript рабочего сервиса.
RemoteDebuggingSample.java
import com.teamdev.jxbrowser.chromium.Browser;
import com.teamdev.jxbrowser.chromium.BrowserPreferences;
import com.teamdev.jxbrowser.chromium.swing.BrowserView;
import javax.swing.*;
import java.awt.*;
/**
* This sample demonstrates how to use Chromium remote debugging feature.
*/
public class RemoteDebuggingSample {
public static void main(String[] args) {
// Specifies remote debugging port for remote Chrome Developer Tools.
BrowserPreferences.setChromiumSwitches("--remote-debugging-port=9222");
Browser browser1 = new Browser();
BrowserView browserView1 = new BrowserView(browser1);
// Gets URL of the remote Developer Tools web page for browser1 instance.
String remoteDebuggingURL = browser1.getRemoteDebuggingURL();
JFrame frame1 = new JFrame();
frame1.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame1.add(browserView1, BorderLayout.CENTER);
frame1.setSize(700, 500);
frame1.setLocationRelativeTo(null);
frame1.setVisible(true);
browser1.loadURL("https://localhost:3000/jxbrowser.service.worker.html");
// Creates another Browser instance and loads the remote Developer
// Tools URL to access HTML inspector.
Browser browser2 = new Browser();
BrowserView browserView2 = new BrowserView(browser2);
JFrame frame2 = new JFrame();
frame2.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame2.add(browserView2, BorderLayout.CENTER);
frame2.setSize(700, 500);
frame2.setLocationRelativeTo(null);
frame2.setVisible(true);
browser2.loadURL(remoteDebuggingURL);
}
}
jxbrowser.service.worker.html
<html>
<head>
<title>JxBrowser Service Worker</title>
<script type="text/javascript">
function postMessage(msg) {
navigator.serviceWorker.controller.postMessage({
message: msg,
});
}
function logMessage(msg) {
console.log(msg);
}
function registerMessageListener(registration) {
navigator.serviceWorker.addEventListener('message', function (evt) {
logMessage("Got event: " + JSON.stringify(evt.data));
});
}
navigator.serviceWorker.register('/jxbrowser-service-worker.js', {scope: '/'})
.then((registration) => registerMessageListener(registration))
.catch((err) => logMessage(err));
</script>
</head>
<body>
<input id="msgToPost" type="text">
<button name="postMsg" onclick="postMessage(document.getElementById('msgToPost').value)">Send</button>
</body>
</html>
JxBrowser-сервис-worker.js
self.addEventListener('message', function(event) {
var promise = self.clients.matchAll()
.then(function(clientList) {
clientList.forEach(function(client) {
client.postMessage(event.data);
});
});
if (event.waitUntil) {
event.waitUntil(promise);
}
});
self.addEventListener('activate', function(event) {
event.waitUntil(self.clients.claim());
});
Поддерживает ли это JxBrowser?