2009-07-24 19 views
6

Tôi đang phát triển một trang .aspx mà cuối cùng sẽ khởi chạy một applet sau khi người dùng nhấp vào một nút (Tôi đang sử dụng thẻ <applet>). Vì vậy, tôi muốn phát hiện nếu java được kích hoạt/cài đặt trên trình duyệt của người dùng.Xác định xem trình duyệt của khách hàng có cài đặt java hay không và có thể khởi chạy các applet

Tôi đang sử dụng phương thức navigator.javaEnabled(). Tuy nhiên, mặc dù điều này đang hoạt động tốt trên IE7, nhưng nó sẽ trả về kết quả không phù hợp trên Firefox 3.0.12 (không biết về các trình duyệt khác nhau), đôi khi nói rằng java được kích hoạt (nó là), và sau đó sau khi khởi chạy applet và quay trở lại ra khỏi applet đến trang này một lần nữa, nó sẽ báo cáo sai. Nếu tôi đóng firefox và trở lại trang khởi chạy applet, navigator.javaEnabled() sẽ báo cáo lại đúng (chính xác).

Có bất kỳ điều gì đang xác định hành vi không phù hợp này hay không navigator.javaEnabled() không phải là cách tốt nhất để thực hiện kiểm tra applet java?

Xin cảm ơn trước.

Trả lời

10

Make trong applet của bạn một phương pháp

public boolean isRunning() { return true; } 

Bây giờ, tạo một applet:

<applet src=".../yourapplet.jar" id="someId"> 

Và bây giờ quấn mã này trong một số chức năng helper

try { 
    var x = document.getElementById('someId').isRunning() 
    return x; 
} catch(e) { 
    return false; 
} 

Tại sao các công trình này? Nếu applet chạy nó sẽ trả về true. Nếu applet không chạy hoặc Java không được hỗ trợ, bạn sẽ nhận được một ngoại lệ, vì vậy bạn sẽ bị sai.

+0

Cảm ơn Marcin cho câu trả lời. Tuy nhiên nếu có thể tôi sẽ không muốn chạy một applet cho thử nghiệm. Có lẽ tôi sẽ sử dụng phương pháp này nếu tôi không tìm được giải pháp khác. Phương pháp tôi đang sử dụng cũng hoạt động tốt trên Google Chrome, nhưng khi tôi mở applet bằng Firefox, sau đó đóng lại và quay lại cùng một trang, navigator.javaEnabled bắt đầu trả về false. Rất lạ! –

+0

Cách duy nhất để chắc chắn 100% Java có thể chạy, là gọi mã Java. Nếu bạn không muốn, sau đó làm cho nó rất hiển thị cho người dùng rằng nếu một cái gì đó không xảy ra trong vòng X giây họ rất có thể cần phải cài đặt Java. –

+0

@Marcin, điều này có sẵn cho tất cả các trình duyệt + JVM hay là một thứ gì đó chỉ hoạt động trên một số kết hợp nhất định? –

1

Bạn cũng có thể thử sử dụng thẻ đối tượng.

Với nó, bạn có thể xác định phiên bản java nào được cài đặt và nhắc người dùng tải xuống phiên bản đó nếu nó không tồn tại.

Đây là thẻ đối tượng mẫu được lấy từ một ứng dụng tôi đang thực hiện, các biến chứng JRE yêu cầu chúng tôi chạy trên 1.4.2_03 để tương thích với các ứng dụng khác.

<object classid="clsid:CAFEEFAC-0014-0002-0003-ABCDEFFEDCBA" id="MyApplet" 
name="MyApplet" width="4" height="4" 
codebase="http://java.sun.com/products/plugin/autodl/jinstall-1_4_2_03-windows-i586.cab#Version=1,4,2,03"> 

Classid chỉ định phiên bản Java bạn muốn tải, bạn có thể đặt thành JRE cụ thể, một họ cụ thể, ví dụ: 1.4.X hoặc phiên bản mới nhất.

Điều khiển mã nguồn nơi người dùng được hướng dẫn nếu họ không đáp ứng những gì mà classid được đặt thành. Lưu ý rằng nếu một khách hàng có cài đặt 1.5 hoặc cao hơn, bạn không thể tham chiếu một JRE cũ hơn do các ràng buộc về bảo mật, Bạn có thể ghi đè điều này qua cài đặt đăng ký trong các cửa sổ nhưng tôi không khuyến nghị sử dụng nó.

Tôi tin rằng bảo mật được thiết lập để bạn chỉ có thể tham khảo một JRE cũ hơn trong cùng một gia đình. tức là người dùng có 1.6.0.10 bạn có thể tham khảo 1.6.0.1 nhưng không thể truy cập bất kỳ thứ gì trong 1.5.X Mặc dù tôi nghĩ rằng tôi nhớ thấy một hộp thoại bảo mật bật lên sau 1.6.0.11, như trước đây nó sẽ mặc định từ chối yêu cầu.

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