Javascript JxBrowser:注册ServiceWorker失败

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

我在JxBrowser中遇到以下错误,但它在Chrome中工作得非常好:

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());
});