Gibt es eine Methode, die den Standardbrowser eines Benutzers als Zeichenfolge zurückgibt?Methode, die den Standardbrowser als Zeichenfolge zurückgibt?
Beispiel von dem, was ich suche:
System.out.println(getDefaultBrowser()); // prints "Chrome"
Gibt es eine Methode, die den Standardbrowser eines Benutzers als Zeichenfolge zurückgibt?Methode, die den Standardbrowser als Zeichenfolge zurückgibt?
Beispiel von dem, was ich suche:
System.out.println(getDefaultBrowser()); // prints "Chrome"
Sie können diese Methode erreichen, indem Register [1] und reguläre Ausdrücke unter Verwendung des Standard-Browsers als Zeichenfolge zu extrahieren. Es gibt keinen "saubereren" Weg, dies zu tun, von dem ich weiß. Jetzt
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";
}
, wenn getDefaultBrowser()
genannt wird, sollte der Standard-Browser für Windows zurückgegeben werden.
Getestete Browser:
Erklärung der Regex (/(?=[^/]*$)(.+?)[.]
):
/(?=[^/]*$)
entspricht der letzte zwischen diesen beiden angepassten Zeichen[.]
passt die .
in der Dateierweiterung(.+?)
fängt die Zeichenfolge /
in der Zeichenfolge auftritt.Sie können sehen, wie dies durch einen Blick auf den Wert von registry
Recht erfasst wird, bevor wir es gegen die Regex Test (I bolded haben, was gefangen wird):
(Standard) REG_SZ " C:/Program Files (x86)/Mozilla Firefox/firefox .exe“-osint -url "% 1"
[1] Nur Windows. Ich habe keinen Zugriff auf einen Mac oder Linux-Computer, aber wenn ich mich im Internet umschlage, denke ich, com.apple.LaunchServices.plist
speichert den Standard-Browser-Wert auf einem Mac, und unter Linux kann ich den Befehl xdg-settings get default-web-browser
ausführen, um den Standard-Browser zu erhalten. Da könnte ich mich aber irren, vielleicht wäre jemand, der Zugang dazu hat, bereit, mich zu testen und zu kommentieren, wie man sie implementiert?
_ "HKEY_CLASSES_ROOT \ http \ shell \ open \ command" _ wird nicht aktualisiert, wenn Internet Explorer als Standardbrowser festgelegt ist. Zumindest nicht auf meinem PC, Windows 7. –
@StevenJeuris Odd, ich habe das gleiche Betriebssystem und diese Registrierung wird aktualisiert, wenn IE eingestellt ist. – syb0rg
Der folgende Registrierungswert wird für mich aktualisiert: _ "HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ Shell \ Associations \ UrlAssociations \ http \ UserChoice" _. Es speichert jedoch eine ProgID und keinen Pfad. –
Warum benötigen Sie den Standardbrowser des Benutzers? Ich vermute, dass Ihr Code auf der Serverseite statt auf der Clientseite ausgeführt wird oder Sie eine Desktopanwendung erstellen? –
Es gibt viele Gründe dafür, den Standardbrowser eines Benutzers zu finden, den ich für statistische Daten mit meinen Kunden verwende. Diese Funktion wird mir sagen, welche Browser sie verwenden, und vielleicht wird mein Code andere Software empfehlen, wenn sie einen bestimmten Browser installiert haben. – syb0rg
Warum benötigen Sie den Standardbrowser dafür? Sie können String userAgent = request.getHeader ("User-Agent"); und dann Browser von ihm bekommen. Die meisten Leute haben IE als Standard-Browser und werden Chrome oder Firefox verwenden. –