對於一個Swing寫的應用程式,在很多的工程中,是需要嵌入到頁面的。這樣不僅增加了互動性和介面可操作性,而且讓程式更加人性化。
而以往的介面嵌入,大多是以Applet為主的。但是對於Swing為主的程式,sun公司仍然是提供解決方案的。
原理:
頁面代碼:
<OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
width="400" height="300" align="baseline"
codebase="http://java.sun.com/products/plugin/1.4/jinstall-14-win32.cab#Version=1,4,0,mn">
<PARAM NAME="code" VALUE="Example.class">
<PARAM NAME="codebase" VALUE="/">
<PARAM NAME="type" VALUE="application/x-java-applet;jpi-version=1.4">
<PARAM NAME="model" VALUE="models/HyaluronicAcid.xyz">
<PARAM NAME="scriptable" VALUE="true">
<COMMENT>
<EMBED type="application/x-java-applet;jpi-version=1.4" width="400"
height="300" align="baseline" code="Example.class" codebase="/"
model="models/HyaluronicAcid.xyz"
pluginspage="http://java.sun.com/j2se/1.4/download.html">
<NOEMBED>
No Java 2 SDK, Standard Edition v 1.4 support for APPLET!!
</NOEMBED>
</EMBED>
</COMMENT>
</OBJECT>
解釋:
<OBJECT> 是IE瀏覽器推薦用來嵌入Applet的標籤。這個標籤中的URI以“clsid”開始,只有IE瀏覽器支援這個屬性,其他瀏覽器都不支援。URI以“clsid”開始,表明這是一個ActiveX控制項,只有Windows中的IE才識別的屬性,代表註冊表中一個註冊的ActiveX類,“CAFEEFAC-0014-0002-0000-ABCDEFFEDCBA”是SUN JRE安裝時在Windows中註冊的,代表SUN Java Plug-in 1.4.2。因此當IE解析到樣本中的標籤時,會通過註冊表,尋找到Java Plug-in,然後啟動JRE,在當前位置渲染這個Applet。另外一個clsid值:“8AD9C840-044E-11D1-B3E9-00805F499D93”,代表當前最新的JRE版本。“codebase”屬性指定了一個特定版本JRE的下載地址,當用戶端機器上沒有安裝Java Plug-in時,會自動從這個地址下載安裝Java Plug-in。“scriptable”屬性用於指定Applet樣本是否能與頁面中的JavaScript互動。
<EMBED >是Netscape Navigator 4.x瀏覽器支援的嵌入Applet的標籤,其他瀏覽器很少支援這個標籤的,因此實際應用的很少。這個標籤不支援以內嵌Param標籤的方式為Applet傳遞參數。
因此,最上面的寫法是一種折中的寫法-----為的是這種主流瀏覽器對Swing的支援。把Embed標籤用Comment標籤包含起來,放在Object標籤內部。IE在解釋Object標籤時,會忽略Comment標籤內的內容。而Netscape Navigator不能識別clsid、不能識別Comment標籤,它會忽略忽略外層的Object標籤和Comment標籤,而只看到Embed標籤的內容。這樣,這段代碼可以同時適應IE和Netscape Navigator兩種瀏覽器。