Я пытаюсь отобразить html-документ из приложения JavaFX. Поэтому я позвонил
getHostServices().showDocument(filename);
Но вместо того, чтобы показывать документ в браузере Firefox по умолчанию, система запускает Chrome и отображает в нем файл. Chrome даже предлагает «Google Chrome не является вашим браузером по умолчанию» и показывает большую кнопку «Установить по умолчанию».
Как я могу убедиться, что документ отображается в браузере по умолчанию?
Я использую Ubuntu 22.04, Firefox 125.0, Chrome 124.0.6367.60, openjdk 11.0.22, javafx-sdk-11.0.2 (от gluon)
@James_D Спасибо за информацию. xdg-open запускает Firefox.
Я посмотрел код. Список браузеров начинается с xdg-open. Почему не запустился Firefox? Странный.
Этот код запускает браузер по умолчанию Firefox: Runtime.getRuntime().exec(new String[]{"xdg-open", filename});
Возможно, приложение работает под другим пользователем или с другой установленной переменной пути (или, возможно, какой-либо другой переменной среды)? Хотя я не знаю, я просто предполагаю на данный момент. То, что вы описываете, трудно объяснить.
Я понял. Источник, на который вы указали, был более новой версией. Я использую jfx 11.0.2. В этом источнике в списке браузеров нет xdg-open. Это просто {"google-chrome", "firefox", "opera", "konqueror", "mozilla"}
Вы можете опубликовать ответ на свой вопрос
Согласно исходному коду, поведение HostServices.showDocument() в Linux заключается в простом выполнении списка команд для открытия аргумента URL. В версии javafx-sdk-11.0.2 (скачанной с gluonhq) список выглядит следующим образом: {"google-chrome", "firefox", "opera", "konqueror", "mozilla"}, поэтому Google Chrome открывается файл независимо от того, какой браузер используется по умолчанию в Linux.
В более поздней версии javafx (указанной James_D) команда «xdg-open» добавляется в качестве первого элемента списка. Это должно привести к ожидаемому поведению метода showDocument. Хотя мне еще предстоит это проверить.
Похоже, что реализация 🔁 просто возвращает первый браузер
b
в жестко запрограммированном списке, для которого выполнение"which "+b
имеет непустой возврат. Вы могли бы достаточно легко переопределить это непосредственно для платформ, отличных от Windows или Mac, хотя это немного неудовлетворительное решение. Что делает выполнениеxdg-open url
из командной строки (заменаurl
фактическим URL-адресом, который вы открываете)?