Javafx WebView не может правильно отображать страницы geoportal.ch (проверено с помощью javafx 22, javafx 17.10)

речь идет не о картах Google, все страницы, содержащие какую-либо визуализацию карт, не отображают их. А как конкретно показать содержимое geoportal.ch? Не работает несколько страниц:

geoportal.ch или Карты Google или openstreetmaps

эти страницы непригодны для использования, поскольку карты отсутствуют.

Почему невозможно отобразить страницу с картами, в частности geoportal.ch, с помощью компонента Javafx Webview? И как улучшить/исправить, чтобы все работало как положено?

Мои исследования: в ответах на другие вопросы говорится, что в случае с Google-картами они изменили свой API с определенной версии javafx. Ну а зачем им (раньше это работало...)? Если по какой-то причине это было правдой, то почему на других страницах карты тоже не отображаются. SwingNode в сочетании с jcef также не работает или держится в секрете.

В конце концов, похоже, что единственное решение — это купить несвободное программное обеспечение… что здесь не так? Интернет имеет решающее значение - работать наполовину с компонентом Javafx-Webview просто странно. Это на протяжении многих лет. Но дело не в картах Google, а в незрелом компоненте веб-просмотра. Может быть, вы поймете, почему карты вообще не отображаются.

Я включил com.sun.webkit.WebPage.level = FINE для ведения журнала, что не дает мне решения, как его решить.

Демоприложение:

package com.example.webviewsample;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.BorderPane;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;

public class WebViewSample extends Application {

    @Override
    public void start(Stage primaryStage) {
        WebView webView = new WebView();
        WebEngine webEngine = webView.getEngine();

        TextField urlField = new TextField("https://www.geoportal.ch/ch/map/40?y=2683332.00&x=1247089.90&scale=2000&rotation=0&topic=property&highlight=1&bfsnr=3203&property=W7391");
        Button goButton = new Button("Go");

        goButton.setOnAction(event -> {
            String url = urlField.getText();
            webEngine.load(url);
        });

        BorderPane root = new BorderPane();
        root.setTop(urlField);
        root.setCenter(webView);
        root.setBottom(goButton);

        Scene scene = new Scene(root, 800, 600);
        primaryStage.setScene(scene);
        primaryStage.setTitle("WebView Sample");
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
Это может кое-что прояснить???
SedJ601 18.04.2024 16:38
Gluon Maps предоставляет API для показа карт на основе данных OpenStreetMaps, которые (насколько я понимаю) не основаны на веб-просмотре.
James_D 18.04.2024 17:39

Да, у Глюона есть компонент карты. Хотя это работает только для OpenStreetMaps... а не для страниц с картами.

tonimaroni 18.04.2024 18:04

СедДж601. Нет, на самом деле это не так, поскольку оно охватывает карты Google. И, как написано, изменение userAgent должно избежать этого, если это проблема с Google. То, что я написал, не единственная проблема. Ни одна страница с картами не работает.

tonimaroni 18.04.2024 18:06

Я думаю, что, судя по ссылке, ни JavaFX, ни Google официально не поддерживают друг друга. Для меня это означает, что что-то может сломаться или не работать, учитывая, что они не находятся на одной странице и иногда что-то меняют. Я могу только предположить, что то же самое справедливо и для двух других упомянутых вами картографических технологий.

SedJ601 18.04.2024 21:35

Карты Google отображаются (в настоящее время) с JavaFX 18, как указано в дубликате. Я также попробовал ссылку geoportal.ch из вашего вопроса с JavaFX 18, но она не отобразилась. Возможно, это не дубликат, поскольку вы ссылаетесь на несколько картографических технологий (при желании я могу снять пометку как дубликат). Но я думаю, что отмеченный дубликат отвечает на ваш второй главный вопрос: «Как улучшить/исправить, чтобы он работал так, как ожидалось?» -> используйте JavaFX 18 и Google Maps.

jewelsea 19.04.2024 01:35

«Изменение пользовательского агента должно избегать этого, если это проблема с Google» -> Для рендеринга карты требуется гораздо больше, чем установка строки пользовательского агента. Сам пользовательский агент должен быть изначально способен отображать карту, но это не относится (в настоящее время) к JavaFX > 18 и Google Maps. Также, как вы заметили: «если все страницы с картами не работают, скорее всего, это проблема с компонентом Webview» -> это правда, это также могло быть проблемой с реализацией Google, но в данном случае это проблема. с возможностями WebView.

jewelsea 19.04.2024 01:40

Ну, я думаю, что это не дубликат, а, в конце концов, это ошибка WebView. Возможно, кто-то узнает и позаботится об этом. Раньше работало на гугл картах и ​​как вы говорите с 18. Потом со дня на день перестало работать. Конечно, не из-за изменений Google в их API. Должно быть, они реализовали проверку, если это не версия 18... не так ли? Возможно нет. Итак, опять же, в конце концов, это WebView. Итак, я остановился на старой версии 1.8 или просто на 18. Но в 18 отсутствуют другие проблемы и т. д., что также непригодно для использования в моем случае. WebView: мне приходит в голову, что это специально, чтобы не иметь работоспособного компонента.

tonimaroni 19.04.2024 21:23

«Они, должно быть, реализовали проверку, если это не версия 18… не так ли?» -> Почти наверняка нет. Они официально не поддерживают JavaFX WebView в качестве клиента, поэтому я сомневаюсь, что они добавят какой-то такой блок. С другой стороны, из исследований, упомянутых в соответствующем вопросе, известно, что Карты Google в настоящее время работают в версии 18, а не в версии 18.0.1+, и что версия WebKit в JavaFX была изменена между этими двумя версиями. Таким образом, изменение версии WebKit или интерфейса JavaFX к нему в настоящее время приводит к сбою Google Maps в более поздних версиях JavaFX.

jewelsea 19.04.2024 23:00

«Итак, я застрял на старой версии 1.8 или просто на 18. Но в 18 отсутствуют другие проблемы и т. д., что также непригодно для использования в моем случае. WebView: Мне приходит в голову, что это специально, чтобы не иметь работоспособного компонента» -> учитывая ваши заявленные требования, я с вами согласен. Если вы заинтересованы в исправлении JavaFX WebView, чтобы он мог поддерживать Google Maps в будущих версиях, вы можете обсудить этот вопрос с разработчиками JavaFX в списке рассылки openjfx-dev.

jewelsea 19.04.2024 23:02

Поскольку вы не верите, что это дубликат JavaFX, не встраивающий Google Maps html, что вполне понятно, я удалил дубликат маркера и снова открыл вопрос, чтобы можно было добавить ответы, если они станут доступны в будущее.

jewelsea 19.04.2024 23:03
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
11
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Он работал только с версией JDK8u411 и jfx18. Итак, в конце концов, это ошибка компонента веб-просмотра. Я выполнил отчет об ошибке, который теперь официально можно найти здесь:

https://bugs.java.com/bugdatabase/view_bug?bug_id=JDK-8331640

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