2012-09-17 31 views
11

Tôi đang cố gắng khám phá khả năng dữ liệu URL để nhúng trong ứng dụng Java HTML.Nhúng Java applet thông qua dữ liệu URL

Tài liệu, để thẻ HTML khởi tạo một applet java 1, không loại trừ tùy chọn này nhưng dường như tôi không thể thực hiện việc này.

Tôi có biến thể khác nhau của giá trị các thẻ HTML sử dụng (đối tượng và applet) và những gì tôi nghĩ đến gần mục tiêu của tôi là thế này:

<object type="application/x-java-applet" width="100" height="100"> 
    <param name="archive" value="data:application/java-archive;base64,BASE64_OF_JAR"/> 
    <param name="code" value="test.class"/> 
    <h1>not working</h1> 
</object> 

này kết quả dao động trong một IlegalArgumentException với text "name". Tôi kiểm tra điều này bằng cách nhấp vào biểu tượng lỗi trên trình duyệt. On The java console toàn bộ stack trace là:

java.net.MalformedURLException: unknown protocol: data 
     at java.net.URL.<init>(Unknown Source) 
     at java.net.URL.<init>(Unknown Source) 
     at sun.plugin.util.ProgressMonitorAdapter.setProgressFilter(Unknown Source) 
     at sun.plugin2.applet.Plugin2Manager.setupProgress(Unknown Source) 
     at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source) 
     at java.lang.Thread.run(Unknown Source) 

Có ai có một ý tưởng về làm thế nào để làm điều này hoặc nếu nó không phải là có thể?

PS: Có một ví dụ về cách nhúng một JNLP trong HTML bởi Oracle here

+0

Phải thừa nhận tôi đã không đọc bài đăng cẩn thận vào ngày khác và bỏ lỡ liên kết cuối cùng đó. Điều thú vị là một JNLP có thể được mã hóa cơ bản 64. –

+0

Điều gì sẽ xảy ra nếu bạn trao đổi 'dữ liệu: ứng dụng/java-lưu trữ' với' dữ liệu: application/x-java-archive'? –

+0

Đó là ngoại lệ tương tự. Trình xử lý plugin dường như không nhận ra URL DATA, thật tuyệt khi thấy mã nguồn của plugin :) Ngoại lệ đầy đủ: http://pastebin.com/ddsDSTQg – user823959

Trả lời

5

HTML4 specification cho phần tử OBJECT cho phép nhúng dữ liệu nội tuyến qua URL DATA và thuyết minh Applet documentation từ Oracle cũng cho phép điều này. Các bài kiểm tra được thực hiện cho thấy trình duyệt Java plugin (từ Oracle), và mã nguồn có sẵn từ Java SE 6, cho thấy rằng việc thực hiện không hỗ trợ nó.

Trong trường hợp này, dường như không quan trọng nếu trình duyệt hỗ trợ nó, vì việc xử lý tài nguyên tham chiếu tài nguyên trong Object/Applet HTML Element được thực hiện bởi plugin trình duyệt.

Một giải pháp thay thế sẽ là sử dụng deserialization applet, được tuần tự hóa thông qua DỮ LIỆU URL, sử dụng thuộc tính OBJECT là APPLET element. Như đã đề cập trong đặc tả HTML4, không có hỗ trợ hoạt động cho thuộc tính APPLET và OBJECT, và JRE dường như không hỗ trợ deserialization Object từ URL DATA.

Tóm lại, JRE không hỗ trợ tính năng deserialization base64 trong các thuộc tính HTML, MỤC ĐÍCH và MÃ LƯU TRỮ.

Ngoài ra còn có BUG về hỗ trợ DỮ LIỆU URL trong JRE1.4.1 không được đáp ứng Bug ID: 4756961.

Kết quả xét nghiệm của tôi với JRE7 trong một máy 64 bit của Windows như sau:

  • Đi qua một JAR qua DỮ LIỆU URL để ARCHIVE kết quả thuộc tính trong một IllegalArgumentException trong Applet2Manager.loadJarFiles();
  • Chuyển lớp qua URL DỮ LIỆU đến kết quả thuộc tính CODE trong một ClassNotFoundException trong Applet2ClassLoader.findClass();
  • Chuyển một tệp thông tin tuần tự hóa qua URL DATA đến kết quả thuộc tính OBJECT trong FileNotFoundException trong Plugin2ClassLoader.getResourceAsResource().
+0

câu trả lời xuất sắc, được nghiên cứu kỹ lưỡng với các liên kết hữu ích. Ước gì tôi có thể upvote nhiều hơn một lần. – bonsaiviking

2

Thậm chí nếu nó là cho phép theo tiêu chuẩn HTML, JRE cùng thường không hiểu dữ liệu mã hóa base64.

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