在多種瀏覽器中嵌入Applet

1?基本信息

摘要:一個開發好的Java Applet,是通過標準的標簽(Tag)嵌入到HTML頁面中的。瀏覽器在解析到支持的嵌入Applet的標簽時,會啟動Java Plug-in來渲染標簽中的Java Applet。

由于歷史原因,在頁面中嵌入Applet產生了幾種相互不兼容的方式,不同的瀏覽器、乃至同一個瀏覽器的不同版本,支持的標簽都不完全相同。本文關注的是 不同瀏覽器Applet嵌入的差異性,首先介紹幾種把Applet嵌入到頁面中的標簽,再介紹幾個能夠支持多種瀏覽器的嵌入方式。

作者:丁向武

2?頁面中嵌入Applet的幾種方式

2.1?Applet Tag

  Applet標簽是最早IE用來支持嵌入Java Applet的標簽,那個時候微軟還有自己的JAVA虛擬機。在有些版本的瀏覽器上,Applet標簽是由瀏覽器自己渲染的,而不是由SUN Java Plug-in渲染的。這個標簽出現的比較早,現在有些瀏覽器仍然能夠兼容它,比如IE、Firefox等,但Netscape不支持這個標簽。現在的 W3C規范里,這個標簽已經不推薦使用,而是被Object標簽代替了。這個標簽最大的問題是,在客戶端沒有安裝Java Plug-in時,不能指定一個自動下載安裝Java Plug-in的地址。

下面是這個標簽的一個例子:

  1. <APPLET code="XYZApp.class" codebase="html/" archive="Sample.jar"

  2. align="baseline" width="200" height="200">

  3. <PARAM name="model" value="models/HyaluronicAcid.xyz">

  4. No Java 2 SDK, Standard Edition v 1.4.2 support for APPLET!!

  5. </APPLET>

?

2.2?Embed Tag

  這是Netscape Navigator 4.x瀏覽器支持的嵌入Applet的標簽,其他瀏覽器很少支持這個標簽的,因此實際應用的很少。這個標簽不支持以內嵌Param標簽的方式為 Applet傳遞參數。

下面是這個標簽的例子:

  1. <EMBED type="application/x-java-applet;jpi-version=1.4.1" width="200"

  2. height="200" align="baseline" code="XYZApp.class"

  3. codebase="html/" model="models/HyaluronicAcid.xyz"

  4. pluginspage="http://java.sun.com/j2se/1.4.1/download.html">

  5. <NOEMBED>

  6. No Java 2 SDK, Standard Edition v 1.4.1 support for APPLET!!

  7. </NOEMBED>

  8. </EMBED>

?

2.3?Object:clsid Tag

  這是現在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交互。

  這個標簽功能比較豐富,可以通過Param標簽為Applet傳遞參數、設置需要的JDK版本、指定自動下載JRE的路徑等。在IE中嵌入 Applet時,都要使用這個標簽。

下面是這個標簽的示例:

  1. <OBJECT classid="clsid:CAFEEFAC-0014-0002-0000-ABCDEFFEDCBA"

  2. width="200" height="200" align="baseline"

  3. codebase= http://java.sun.com/products/plugin/autodl/jinstall-1_4_2-windows-i 586.cab#Version=1,4,2,0">

  4. <PARAM name="code" value="XYZApp.class">

  5. <PARAM name="codebase" value="html/">

  6. <PARAM name="type" value="application/x-java-applet;jpi-version=1.4.2">

  7. <PARAM name="model" value="models/HyaluronicAcid.xyz">

  8. <PARAM name="scriptable" value="true">

  9. No Java 2 SDK, Standard Edition v 1.4.2 support for APPLET!!

  10. </OBJECT>

2.4?Object:java Tag

  這是當前的W3C規范推薦的在瀏覽器中嵌入Applet的方式,除IE外的大多數瀏覽器的當前版本都能夠支持,包括Netscape Navigator、Firefox等,并且不受操作系統平臺的限制。URI以“java”開始,表明這里嵌入的是一個Java Applet,瀏覽器會啟動Java Plug-in來渲染這個Applet對象。如果客戶端沒有安裝Java Plug-in,瀏覽器會自動到Sun的站點上下載和安裝最新的Java Plug-in。

下面是這個標簽的示例:

  1. <OBJECT classid="java:Sample2.class"

  2. type="application/x-java-applet"

  3. archive="Sample2.jar"

  4. height="300" width="450" >

  5. <PARAM name="model" value="models/HyaluronicAcid.xyz">

  6. </ OBJECT>

3?同時支持多種瀏覽器的嵌入方式

  通過上面的介紹可以看到,已有的幾種在頁面中嵌入Applet的方式,都只能適應特定的瀏覽器。對于幾種常用的瀏覽器,如IE、 Netscape Navigator、Firefox等,沒有一種方式能夠同時適應。必須要做一項特殊處理,才能使同一段HTML代碼能夠適應多種瀏覽器。下面介紹幾種方法。

3.1?組合Object:clsid、 Embed

  如下面的示例所示,把Embed標簽用Comment標簽包含起來,放在Object標簽內部。IE在解釋Object標簽時,會忽略 Comment標簽內的內容。而Netscape Navigator不能識別clsid、不能識別Comment標簽,它會忽略忽略外層的Object標簽和Comment標簽,而只看到Embed標簽的內容。這樣,這段代碼可以同時適應IE和Netscape Navigator兩種瀏覽器。

示例:

  1. <OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"

  2. width="200" height="200" align="baseline"

  3. codebase="http://java.sun.com/products/plugin/1.4/jinstall-14-win32.cab#Version=1,4,0,mn">

  4. <PARAM NAME="code" VALUE="XYZApp.class">

  5. <PARAM NAME="codebase" VALUE="html/">

  6. <PARAM NAME="type" VALUE="application/x-java-applet;jpi-version=1.4">

  7. <PARAM NAME="model" VALUE="models/HyaluronicAcid.xyz">

  8. <PARAM NAME="scriptable" VALUE="true">

  9. <COMMENT>

  10. <EMBED type="application/x-java-applet;jpi-version=1.4" width="200"

  11. height="200" align="baseline" code="XYZApp.class"

  12. codebase="html/" model="models/HyaluronicAcid.xyz"

  13. pluginspage="http://java.sun.com/j2se/1.4/download.html">

  14. <NOEMBED>

  15. No Java 2 SDK, Standard Edition v 1.4 support for APPLET!!

  16. </NOEMBED>

  17. </EMBED>

  18. </COMMENT>

  19. </OBJECT>

3.2?利用IE的條件注釋

IE識別如下樣式的條件注釋(Conditional Comments):

?<!--[if !IE]>

??非IE 瀏覽器時的代碼

?<![endif]-->

  這個條件注釋只有IE識別,其他瀏覽器會把這兩行作為普通的HTML注釋忽略。因此,可以用下面的形式來適應所有的瀏覽器:

  1. <!--[if !IE]> Firefox and others will use outer object -->

  2. <object classid="java:Sample2.class"

  3. type="application/x-java-applet"

  4. archive="Sample2.jar"

  5. height="300" width="450" >

  6. <!--<![endif]-->

  7. <!-- MSIE (Microsoft Internet Explorer) will use inner object -->

  8. <object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"

  9. codebase="http://java.sun.com/update/1.5.0/jinstall-1_5_0-windows-i586.cab"

  10. height="300" width="450" >

  11. <param name="code" value="Sample2" />

  12. <param name="archive" value="Sample2.jar" />

  13. <strong>

  14. This browser does not have a Java Plug-in.

  15. <br />

  16. <a href="http://java.sun.com/products/plugin/downloads/index.html">

  17. Get the latest Java Plug-in here.

  18. </a>

  19. </strong>

  20. </object>

  21. <!--[if !IE]> close outer object -->

  22. </object>

  23. <!--<![endif]-->

  對于IE瀏覽器,它會忽略條件注釋之間的代碼,因此只會看到<object classid="clsid:..這個標簽內的內容。對于非IE的其他瀏覽器,會忽略HTML注釋,并且不會解釋clsid這個屬性,因此也會忽略& lt;object classid="clsid:..>…</object>之間的內容,也就是只會看到<object classid="java:…的內容。

  這種方法可以適應所有的瀏覽器。

3.3?利用JavaScript

  各種主流瀏覽器的當前版本都能夠支持JavaScript,因此我們可以用JavaScript來判斷瀏覽器的版本,然后輸出合適的HTML代碼。這種方式能支持大多數主流的瀏覽器,如IE、Netscape Navigator、Firefox等。

示例如下:

  1. <script language="Javascript">

  2. var _app = navigator.appName;

  3. if (_app == 'Netscape') {

  4. document.write('<embed code="Applet1.class"',

  5. 'width="200"',

  6. 'height="200"', 'type="application/x-java-applet;version=1.5.0">');

  7. }

  8. else if (_app == 'Microsoft Internet Explorer') {

  9. document.write('<OBJECT ',

  10. 'classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"',

  11. 'width="200"',

  12. 'height="200">',

  13. '<PARAM name="code" value="Applet1.class">',

  14. '</OBJECT>');

  15. }

  16. else {

  17. document.write('<p>Sorry, unsupported browser.</p>');

  18. }

  19. </script>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/248996.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/248996.shtml
英文地址,請注明出處:http://en.pswp.cn/news/248996.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

share團隊沖刺3

團隊沖刺第三天 昨天&#xff1a;完成了對輸出文字&#xff0c;按鈕控件的添加&#xff0c;能夠將其在模擬器上運行 今天&#xff1a;學習輸入的添加方式 問題&#xff1a;Android resource linking failed 在改變按鈕樣式的時候&#xff0c;出現了這個問題&#xff0c;正在百度…

Django學習手冊 - ORM 數據創建/表操作 匯總

ORM 查詢的數據類型: QuerySet與惰性機制(可以看作是一個列表) 所謂惰性機制:表名.objects.all()或者.filter()等都只是返回了一個QuerySet&#xff08;查詢結果集對象&#xff09;&#xff0c;它并不會馬上執行sql&#xff0c;而是當調用QuerySet的時候才執行。 QuerySet特點&…

applet實現大文件ftp上傳(三)

下一步呢&#xff0c;當然就是對這個jar文件進行數字證書包裝。流程如下&#xff1a; <1>、生成密匙證書(key certificate)&#xff0c;該證書將存儲在你的.keystore文件中。Validity指的是密匙的有效期&#xff0c;默認是180&#xff0c;但是這里我們需要一年的時間&am…

網站301重定向 解決方法

網站301重定向&#xff0c;一般都是將不帶www的域名轉向帶有www的&#xff0c;有幾個小朋友問過幾次需要在哪改&#xff0c;寫出來不會的參考下。 1、新建一個“.htaccess”文件 2、復制以下代碼&#xff1a;&#xff08;a你的域名&#xff09; Options FollowSymLinks rewrite…

Vue 從入門到進階之路(十四)

之前的文章我們對 vue 的基礎用法已經有了很直觀的認識&#xff0c;本章我們來看一下 vue 中的生命周期函數。 上圖為 Vue官方為我們提供的完整的生命周期函數的流程圖&#xff0c;下面的案例我們只是走了部分情況流程&#xff0c;但所有的生命周期函數都涉及到了。 1 <!DOC…

css 清除浮動float 嗒嘀嗒滴 ----20181120

手動給父元素添加高度通過clear清除內部和外部浮動給父元素添加overfloat屬性并結合zoom:1使用給父元素添加浮動        常用方法&#xff1a; ①給兄弟元素添加clear屬性&#xff1a;添加一個class為clear&#xff1a;both&#xff0c; ②添加偽類&#xff1a;.clearf…

applet實現大文件ftp上傳(一)

由于要用APPLET實現大文件FTP上傳下載&#xff0c;從網上搜索了幾下&#xff0c;找到很多資料&#xff0c;最后決定采用基于 org.apache.commons.net.ftp包實現FTP上傳下載&#xff0c;Net包中的類既提供對協議的底層訪問也有高層的抽象。在大多數情況下&#xff0c;抽 象是足夠…

微軟最爽命令行工具發布!

最近微軟發布了命令行工具Windows Terminal&#xff0c;簡直要讓我們爽翻天 長期以來&#xff0c;Linux和Mac下的命令行工具自成一派&#xff0c;Windows卻是另一套命令系統。這就比較惡心了&#xff0c;這也是很多開發者不選擇Windows系統的原因。 但是現在完全不一樣了&#…

定時任務 Cron表達式

Cron表達式由6~7項組成&#xff0c;中間用空格分開。從左到右依次是&#xff1a; 秒、分、時、日、月、周幾、年&#xff08;可省略&#xff09; Cron表達式的值可以是數字&#xff0c;也可以是以下符號&#xff1a; "*"&#xff1a;所有值都匹配 "?"&…

vue項目中 axios請求攔截器與取消pending請求功能 - 年少、 - 博客園

在開發vue項目中&#xff0c;請求是不可缺少的&#xff0c;在發送請求時常常需要統一處理一些請求頭參數等設置與響應事件&#xff0c;這時利用請求攔截器再好不過。 這里以axios請求為例 實現了設置統一請求頭添加token, 其中token在登錄時被存入了localStorage中。 同時攔…

gitbook 入門教程之解決windows熱加載失敗問題

破鏡如何貼花黃 gitbook 在 Windows 系統無法熱加載,總是報錯! gitbook 是一款文檔編寫利器,可以方便地 markdown 輸出成美觀優雅的 html ,gitbook serve 啟動服務器后,原來相貌平平的 markdown 丑小鴨搖身一變就成了傾國傾城的 html 絕色佳人. 如果源文件發生更改,Windows 卻無…

理解DOM事件流的三個階段 - Lxxyx的開發筆記 - SegmentFault 思否

本文主要解決兩個問題&#xff1a; 什么是事件流 DOM事件流的三個階段 起因 在學習前端的大半年來&#xff0c;對DOM事件了解甚少。一般也只是用用onclick來綁定個點擊事件。在寒假深入學習JavaScript時&#xff0c;愈發覺得自己對DOM事件了解不夠&#xff0c;遂打開我的《J…

支付寶APP支付 統一下單 php服務端 tp5

/*支付寶第三方支付 * *生成APP支付訂單信息 * param number  uid 用戶id * param string   token 用戶token * param number  oid 訂單id * param string   title 標題 * param string    body …

python第十九天(random、json、pickle、hashlib、hmac、shutil、shevle模塊)

今日內容&#xff1a; 1. random 模塊 2. json模塊 3. pickle 模塊 4.hashlib 模塊 5. hmac 模塊 6. shutil 模塊 7. shelve 模塊 1. random 模塊&#xff1a; random 模塊 獲取隨機值import randomfor i in range(10): print(random.random()) # random.random() 隨機獲取…

NodeJS入門04-Express路由和中間件 - 小之 - 博客園

nodeJS入門04-Express路由和中間件 Express框架是后臺的Node框架&#xff0c;在后臺的受歡迎的程度&#xff0c;和jQuery一樣&#xff0c;就是企業的事實上的標準。 路由 路由是指如何定義應用的端點&#xff08;URIs&#xff09;以及如何響應客戶端的請求。 路由是由一個 …

jmeter(四十五)常用Beanshell腳本

整理了一批jmeter常用的beanshell腳本供大家參考&#xff01; 時間戳 import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; try{ Date date new Date(); //獲取當前時間 SimpleDateFormat sf new SimpleDateFormat("yyyy-MM-dd HH:mm…

Critical error detected c0000374

我發現出現上述錯誤是 free 兩次內存 float* ddnew float[2];delete[] dd;delete[] dd;轉載于:https://www.cnblogs.com/hook-gou/p/9994662.html

nodejs開發 過程中express路由與中間件的理解 - pyj063 - 博客園

nodejs開發 過程中express路由與中間件的理解 nodejs開發 express路由與中間件 路由 通常HTTP URL的格式是這樣的&#xff1a; http://host[:port][path] http表示協議。 host表示主機。 port為端口&#xff0c;可選字段&#xff0c;不提供時默認為80。 path指定請求資源的…

錯誤MSB4018 “ResolvePackageAssets”任務意外失敗的解決方法

昨天系統奔潰了&#xff0c;重裝系統后發現&#xff0c;之前寫的.netcore項目打開后重新生成報錯&#xff0c;錯誤如下嚴重性 代碼 說明 項目 文件 行 禁止顯示狀態 錯誤 MSB4018 “ResolvePackageAssets”任務意外失敗。 NuGet.Packaging.Core.Packag…

(五)Unity插件生成

1&#xff09;新建空的AndroidStudio工程&#xff0c;但是新建過程時最小SDK版本要與unity一致&#xff0c;如下圖所示&#xff0c;本次操作均為api16 2&#xff09;創建Library&#xff0c;如下圖所示&#xff0c;新建module&#xff0c;然后選擇Android Library。 新建模塊為…