2013-04-06 27 views
17

Có phương pháp nào sẽ trả về trình duyệt mặc định của người dùng dưới dạng Chuỗi không?Phương thức trả về trình duyệt mặc định dưới dạng Chuỗi?

Ví dụ về những gì tôi đang tìm kiếm:

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

Tại sao bạn cần trình duyệt mặc định của người dùng? Tôi đoán mã của bạn sẽ chạy ở phía máy chủ thay vì phía máy khách hoặc bạn đang tạo ứng dụng dành cho máy tính để bàn? –

+0

Có rất nhiều lý do để tìm trình duyệt mặc định của người dùng, tài khoản tôi đang sử dụng là dữ liệu thống kê với khách hàng của tôi. Chức năng này sẽ cho tôi biết những trình duyệt nào họ sử dụng và có lẽ tôi sẽ yêu cầu mã của tôi giới thiệu phần mềm khác nếu họ cài đặt một trình duyệt nhất định. – syb0rg

+0

Tại sao bạn cần trình duyệt mặc định cho điều đó? Bạn có thể làm String userAgent = request.getHeader ("User-Agent"); và sau đó tải trình duyệt từ đó. Hầu hết mọi người sẽ có IE làm trình duyệt mặc định và sẽ sử dụng Chrome hoặc Firefox. –

Trả lời

21

Bạn có thể thực hiện phương pháp này bằng cách sử dụng đăng ký [1] và biểu thức thông thường để trích xuất các trình duyệt mặc định như là một chuỗi. Không có một cách "sạch" hơn để làm điều này mà tôi biết.

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"; 
} 

Bây giờ bất cứ khi nào getDefaultBrowser() được gọi, trình duyệt mặc định cho Windows phải được trả lại.

trình duyệt Tested:

  • Google Chrome (trở về chức năng "Chrome")
  • Mozilla Firefox (hàm trả về "Firefox")
  • Opera (hàm trả về "Opera")

Giải thích về regex (/(?=[^/]*$)(.+?)[.]):

  • /(?=[^/]*$) phù hợp với xảy ra / trong chuỗi
  • [.] cuối cùng phù hợp với . trong phần mở rộng tập tin
  • (.+?) chụp chuỗi giữa hai nhân vật phù hợp.

Bạn có thể xem cách này được chụp bằng cách nhìn vào giá trị của registry ngay trước khi chúng tôi kiểm tra nó chống lại các regex (Tôi đã in đậm những gì đang được chụp):

(Default) REG_SZ " C:/Program Files (x86)/Mozilla Firefox/firefox .exe" -osint -URL "% 1"


[1] Chỉ dành cho Windows. Tôi không có quyền truy cập vào máy tính Mac hoặc Linux, nhưng từ tìm kiếm trên Internet, tôi nghĩ rằng com.apple.LaunchServices.plist lưu trữ giá trị trình duyệt mặc định trên máy Mac và trên Linux tôi nghĩ bạn có thể thực hiện lệnh xdg-settings get default-web-browser để tải trình duyệt mặc định. Tôi có thể sai về điều đó mặc dù, có thể ai đó có quyền truy cập vào những người đó sẽ sẵn sàng thử nghiệm cho tôi và bình luận về cách thực hiện chúng?

+2

_ "HKEY_CLASSES_ROOT \ http \ shell \ mở \ command" _ không được cập nhật khi Internet Explorer được đặt làm trình duyệt mặc định. Ít nhất không phải trên PC của tôi, Windows 7. –

+0

@StevenJeuris Rất tiếc, tôi đang chạy cùng một hệ điều hành và đăng ký được cập nhật khi IE được đặt. – syb0rg

+0

Giá trị đăng ký follwing được cập nhật cho tôi: _ "HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ Shell \ Associations \ UrlHệ thống \ http \ UserChoice" _. Tuy nhiên, nó lưu trữ một ProgID và không phải là một con đường. –

Các vấn đề liên quan