Javascript JxBrowser:注册ServiceWorker失败
我在JxBrowser中遇到以下错误,但它在Chrome中工作得非常好:Javascript JxBrowser:注册ServiceWorker失败,javascript,service-worker,jxbrowser,Javascript,Service Worker,Jxbrowser,我在JxBrowser中遇到以下错误,但它在Chrome中工作得非常好: DOMException:注册ServiceWorker失败:没有与调用方文档关联的URL。 以下是JxBrowser java代码和HTML文件,该文件被加载到JxBrowser和服务工作者javascript中 RemoteDebuggingSample.java import com.teamdev.jxbrowser.chromium.Browser; import com.teamdev.jxbrowser.ch
DOMException:注册ServiceWorker失败:没有与调用方文档关联的URL。
以下是JxBrowser java代码和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是否支持此功能
我使用以下示例检查了JxBrowser 6.14中的ServiceWorker:它可以正常工作,因此我相信JxBrowser 6.14支持ServiceWorker。请试用此示例以查看它是否有效:。您输入一条消息,然后单击“发送”,该消息应显示在浏览器控制台中。在键入一些文本并使用JxBrowser 6.14.2单击“发送”按钮后,我确实看到了控制台消息。我们下载了版本6.14.2,我们已验证它现在对我们正常工作,谢谢。
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());
});