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?

Сообщение об ошибке от JxBrowser 6.14 при указании на этот URL-адрес https://nsivraj.gitlab.io/jxbrowser-service-worker/jxbrowser.service.worker.html

0 ответов

Другие вопросы по тегам