Подтвердить что ты не робот

Метод возвращает браузер по умолчанию в виде строки?

Есть ли метод, который вернет браузер по умолчанию в качестве строки?

Пример того, что я ищу:

System.out.println(getDefaultBrowser()); // prints "Chrome"
4b9b3361

Ответ 1

Вы можете выполнить этот метод, используя реестры [1] и регулярные выражения для извлечения браузера по умолчанию в виде строки. Существует не "более чистый" способ сделать это, о котором я знаю.

public static String getDefaultBrowser()
{
    try
    {
        // Get registry where we find the default browser
        Process process = Runtime.getRuntime().exec("REG QUERY HKEY_CLASSES_ROOT\\http\\shell\\open\\command");
        Scanner kb = new Scanner(process.getInputStream());
        while (kb.hasNextLine())
        {
            // Get output from the terminal, and replace all '\' with '/' (makes regex a bit more manageable)
            String registry = (kb.nextLine()).replaceAll("\\\\", "/").trim();

            // Extract the default browser
            Matcher matcher = Pattern.compile("/(?=[^/]*$)(.+?)[.]").matcher(registry);
            if (matcher.find())
            {
                // Scanner is no longer needed if match is found, so close it
                kb.close();
                String defaultBrowser = matcher.group(1);

                // Capitalize first letter and return String
                defaultBrowser = defaultBrowser.substring(0, 1).toUpperCase() + defaultBrowser.substring(1, defaultBrowser.length());
                return defaultBrowser;
            }
        }
        // Match wasn't found, still need to close Scanner
        kb.close();
    } catch (Exception e)
    {
        e.printStackTrace();
    }
    // Have to return something if everything fails
    return "Error: Unable to get default browser";
}

Теперь, когда вызывается getDefaultBrowser(), должен быть возвращен браузер по умолчанию для Windows.

Проверенные браузеры:

  • Google Chrome (функция возвращает "Chrome" )
  • Mozilla Firefox (функция возвращает "Firefox" )
  • Opera (функция возвращает "Opera" )

Объяснение регулярного выражения (/(?=[^/]*$)(.+?)[.]):

  • /(?=[^/]*$) соответствует последней встречающейся / в строке
  • [.] соответствует . в расширении файла
  • (.+?) фиксирует строку между этими двумя совпадающими символами.

Вы можете увидеть, как это зафиксировано, посмотрев на значение registry прямо перед тем, как мы проверим его против регулярного выражения (я выделил то, что записывается):

(по умолчанию) REG_SZ "C:/Program Files (x86)/Mozilla Firefox/ firefox.exe" -osint -url "% 1"


[1] Только Windows. У меня нет доступа к компьютеру Mac или Linux, но, глядя в Интернет, я думаю, что com.apple.LaunchServices.plist хранит значение браузера по умолчанию на Mac, а в Linux я думаю, что вы можете выполнить команду xdg-settings get default-web-browser, чтобы получить Браузер по умолчанию. Возможно, я ошибаюсь, может быть, кто-то, у кого есть доступ к ним, захочет проверить меня и прокомментировать, как их реализовать?