Czy istnieje metoda, która zwróci domyślną przeglądarkę użytkownika jako ciąg?Metoda zwracająca domyślną przeglądarkę jako ciąg?
Przykład czego szukam:
System.out.println(getDefaultBrowser()); // prints "Chrome"
Czy istnieje metoda, która zwróci domyślną przeglądarkę użytkownika jako ciąg?Metoda zwracająca domyślną przeglądarkę jako ciąg?
Przykład czego szukam:
System.out.println(getDefaultBrowser()); // prints "Chrome"
Można wykonać tę metodę za pomocą rejestrów [1] i wyrażeń regularnych aby wyodrębnić domyślną przeglądarkę jako ciąg znaków. Nie ma "czystszego" sposobu na zrobienie tego, o czym wiem.
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";
}
Teraz, gdy wywoływana jest nazwa getDefaultBrowser()
, należy zwrócić domyślną przeglądarkę dla systemu Windows.
Testowane przeglądarki:
Wyjaśnienie regex (/(?=[^/]*$)(.+?)[.]
):
/(?=[^/]*$)
mecze ostatni występujący /
w ciągu[.]
dopasowuje .
w rozszerzeniu pliku(.+?)
oddaje ciąg pomiędzy tymi dwoma dopasowanych znaków.Można zobaczyć, jak to jest zrobione, patrząc na wartości registry
tuż przed przetestowania go przed regex (mam pogrubione, co zostało zrobione):
(Domyślna) REG_SZ " C:/Program Files (x86)/Mozilla Firefox/zapalić eXE”-osint -url "% 1"
[1] Tylko system Windows. Nie mam dostępu do komputera Mac lub Linux, ale po rozejrzeniu się po Internecie, myślę, że com.apple.LaunchServices.plist
przechowuje domyślną wartość przeglądarki na Macu, a na Linuksie, myślę, że możesz wykonać polecenie xdg-settings get default-web-browser
, aby uzyskać domyślną przeglądarkę. Mogę się jednak mylić, może ktoś z dostępem do nich byłby skłonny przetestować dla mnie i skomentować, jak je wdrożyć?
_ "HKEY_CLASSES_ROOT \ http \ shell \ open \ command" _ nie jest aktualizowane, gdy program Internet Explorer jest ustawiony jako domyślna przeglądarka. Przynajmniej nie na moim komputerze, Windows 7. –
@StevenJeuris Nieparzyste, używam tego samego systemu operacyjnego i rejestr jest aktualizowany po ustawieniu IE. – syb0rg
Następująca dla mnie wartość rejestru jest dla mnie aktualizowana: _ "HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ Shell \ Associations \ UrlAssociations \ http \ UserChoice" _. Przechowuje jednak identyfikator ProgID, a nie ścieżkę. –
Dlaczego potrzebna jest domyślna przeglądarka użytkownika? Domyślam się, że Twój kod będzie działał po stronie serwera, a nie po stronie klienta, czy robisz aplikację na komputery? –
Istnieje wiele powodów, dla których należy znaleźć domyślną przeglądarkę użytkownika, z której korzystam, ponieważ jest to dane statystyczne dotyczące moich klientów. Ta funkcja podpowie mi, jakich przeglądarek używają, i być może zalecę, aby mój kod zalecał inne oprogramowanie, jeśli zainstalowana jest określona przeglądarka. – syb0rg
Dlaczego potrzebujesz domyślnej przeglądarki? Możesz wykonać String userAgent = request.getHeader ("User-Agent"); a następnie pobrać z niego przeglądarkę. Większość osób będzie mieć IE jako domyślną przeglądarkę i będzie używać Chrome lub Firefox. –