2013-04-06 22 views
17

ユーザーのデフォルトブラウザをStringとして返すメソッドはありますか?私が探しています何のデフォルトのブラウザを文字列として返すメソッドですか?

例:

System.out.println(getDefaultBrowser()); // prints "Chrome" 
+0

なぜあなたはデフォルトのブラウザを必要としていますか?あなたのコードはクライアント側ではなくサーバ側で実行されるか、デスクトップアプリケーションを作成していると思いますか? –

+0

ユーザーのデフォルトブラウザを見つける必要がある理由はたくさんあります。私が使っているのは、クライアントとの統計データです。この関数は、どのブラウザを使用しているかを教えてくれます。特定のブラウザがインストールされている場合は、別のソフトウェアを推奨するようにします。 – syb0rg

+0

なぜデフォルトブラウザが必要ですか?あなたは文字列を行うことができます。userAgent = request.getHeader( "User-Agent");それからブラウザを入手してください。ほとんどの人はデフォルトブラウザとしてIEを使用し、ChromeまたはFirefoxを使用します。 –

答えて

21

あなたは文字列として、デフォルトのブラウザを抽出するために、レジストリに[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の(関数が返すが、 "クローム")
  • Mozilla Firefoxの(関数が "Firefoxの" 返す)
  • オペラ(関数は、 "オペラ" を返す)

正規表現の説明(/(?=[^/]*$)(.+?)[.]):

  • /(?=[^/]*$)文字列
  • [.]の最後に発生/
  • (.+?)ファイル拡張子に.と一致する一致したものを2つのマッチした文字の間の文字列をキャプチャします。

    (デフォルト)REG_SZ ":あなたは、私たちは(私が捕獲されているものを太字にしました)正規表現に対してテスト直前registryの値を見て、これが捕獲されてどのように見ることができます

C:/プログラムファイル(x86の)/ Mozilla Firefoxの/ Firefoxの .EXE」-osint -url "%1"


[1] Windowsのみ。私はMacやLinuxコンピュータにアクセスすることはできませんが、インターネットを見てみると、com.apple.LaunchServices.plistはデフォルトのブラウザ値をMacに保存していると思います.Linuxではデフォルトのブラウザを得るためにxdg-settings get default-web-browserコマンドを実行できると思います。私はそれに間違っているかもしれませんが、多分それらにアクセスできる誰かが私のためにテストし、それらを実装する方法についてコメントしてくれるでしょうか?

+2

_ Internet Explorerが既定のブラウザとして設定されている場合、 "HKEY_CLASSES_ROOT \ http \ shell \ open \ command" _は更新されません。少なくとも私のPC、Windows 7にはありません。 –

+0

@StevenJeuris奇妙なことに、IEが設定されているときに同じOSを実行していて、そのレジストリが更新されています。 – syb0rg

+0

次のレジストリ値が更新されます:_ "HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ Shell \ Associations \ UrlAssociations \ http \ UserChoice" _。ただし、パスではなくProgIDを格納します。 –

関連する問題