речь идет не о картах 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);
}
}
Да, у Глюона есть компонент карты. Хотя это работает только для OpenStreetMaps... а не для страниц с картами.
СедДж601. Нет, на самом деле это не так, поскольку оно охватывает карты Google. И, как написано, изменение userAgent должно избежать этого, если это проблема с Google. То, что я написал, не единственная проблема. Ни одна страница с картами не работает.
Я думаю, что, судя по ссылке, ни JavaFX
, ни Google
официально не поддерживают друг друга. Для меня это означает, что что-то может сломаться или не работать, учитывая, что они не находятся на одной странице и иногда что-то меняют. Я могу только предположить, что то же самое справедливо и для двух других упомянутых вами картографических технологий.
Карты Google отображаются (в настоящее время) с JavaFX 18, как указано в дубликате. Я также попробовал ссылку geoportal.ch из вашего вопроса с JavaFX 18, но она не отобразилась. Возможно, это не дубликат, поскольку вы ссылаетесь на несколько картографических технологий (при желании я могу снять пометку как дубликат). Но я думаю, что отмеченный дубликат отвечает на ваш второй главный вопрос: «Как улучшить/исправить, чтобы он работал так, как ожидалось?» -> используйте JavaFX 18 и Google Maps.
«Изменение пользовательского агента должно избегать этого, если это проблема с Google» -> Для рендеринга карты требуется гораздо больше, чем установка строки пользовательского агента. Сам пользовательский агент должен быть изначально способен отображать карту, но это не относится (в настоящее время) к JavaFX > 18 и Google Maps. Также, как вы заметили: «если все страницы с картами не работают, скорее всего, это проблема с компонентом Webview» -> это правда, это также могло быть проблемой с реализацией Google, но в данном случае это проблема. с возможностями WebView.
Ну, я думаю, что это не дубликат, а, в конце концов, это ошибка WebView. Возможно, кто-то узнает и позаботится об этом. Раньше работало на гугл картах и как вы говорите с 18. Потом со дня на день перестало работать. Конечно, не из-за изменений Google в их API. Должно быть, они реализовали проверку, если это не версия 18... не так ли? Возможно нет. Итак, опять же, в конце концов, это WebView. Итак, я остановился на старой версии 1.8 или просто на 18. Но в 18 отсутствуют другие проблемы и т. д., что также непригодно для использования в моем случае. WebView: мне приходит в голову, что это специально, чтобы не иметь работоспособного компонента.
«Они, должно быть, реализовали проверку, если это не версия 18… не так ли?» -> Почти наверняка нет. Они официально не поддерживают JavaFX WebView в качестве клиента, поэтому я сомневаюсь, что они добавят какой-то такой блок. С другой стороны, из исследований, упомянутых в соответствующем вопросе, известно, что Карты Google в настоящее время работают в версии 18, а не в версии 18.0.1+, и что версия WebKit в JavaFX была изменена между этими двумя версиями. Таким образом, изменение версии WebKit или интерфейса JavaFX к нему в настоящее время приводит к сбою Google Maps в более поздних версиях JavaFX.
«Итак, я застрял на старой версии 1.8 или просто на 18. Но в 18 отсутствуют другие проблемы и т. д., что также непригодно для использования в моем случае. WebView: Мне приходит в голову, что это специально, чтобы не иметь работоспособного компонента» -> учитывая ваши заявленные требования, я с вами согласен. Если вы заинтересованы в исправлении JavaFX WebView, чтобы он мог поддерживать Google Maps в будущих версиях, вы можете обсудить этот вопрос с разработчиками JavaFX в списке рассылки openjfx-dev.
Поскольку вы не верите, что это дубликат JavaFX, не встраивающий Google Maps html, что вполне понятно, я удалил дубликат маркера и снова открыл вопрос, чтобы можно было добавить ответы, если они станут доступны в будущее.
Он работал только с версией JDK8u411 и jfx18. Итак, в конце концов, это ошибка компонента веб-просмотра. Я выполнил отчет об ошибке, который теперь официально можно найти здесь:
https://bugs.java.com/bugdatabase/view_bug?bug_id=JDK-8331640