Есть ли метод, который вернет браузер по умолчанию в качестве строки?
Пример того, что я ищу:
System.out.println(getDefaultBrowser()); // prints "Chrome"
Есть ли метод, который вернет браузер по умолчанию в качестве строки?
Пример того, что я ищу:
System.out.println(getDefaultBrowser()); // prints "Chrome"
Вы можете выполнить этот метод, используя реестры [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.
Проверенные браузеры:
Объяснение регулярного выражения (/(?=[^/]*$)(.+?)[.]
):
/(?=[^/]*$)
соответствует последней встречающейся /
в строке[.]
соответствует .
в расширении файла(.+?)
фиксирует строку между этими двумя совпадающими символами.Вы можете увидеть, как это зафиксировано, посмотрев на значение 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
, чтобы получить Браузер по умолчанию. Возможно, я ошибаюсь, может быть, кто-то, у кого есть доступ к ним, захочет проверить меня и прокомментировать, как их реализовать?