在多种浏览器中嵌入Applet
2016-08-12 12:51
197 查看
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的地址。
下面是这个标签的一个例子:
<APPLET code="XYZApp.class" codebase="html/" archive="Sample.jar"
align="baseline" width="200" height="200">
<PARAM name="model" value="models/HyaluronicAcid.xyz">
No Java 2 SDK, Standard Edition v 1.4.2 support for APPLET!!
</APPLET>
2.2 Embed Tag
这是Netscape Navigator 4.x浏览器支持的嵌入Applet的标签,其他浏览器很少支持这个标签的,因此实际应用的很少。这个标签不支持以内嵌Param标签的方式为Applet传递参数。
下面是这个标签的例子:
<EMBED type="application/x-java-applet;jpi-version=1.4.1" width="200"
height="200" align="baseline" code="XYZApp.class"
codebase="html/" model="models/HyaluronicAcid.xyz"
pluginspage="http://java.sun.com/j2se/1.4.1/download.html">
<NOEMBED>
No Java 2 SDK, Standard Edition v 1.4.1 support for APPLET!!
</NOEMBED>
</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时,都要使用这个标签。
下面是这个标签的示例:
<OBJECT classid="clsid:CAFEEFAC-0014-0002-0000-ABCDEFFEDCBA"
width="200" height="200" align="baseline"
codebase= http://java.sun.com/products/plugin/autodl/jinstall-1_4_2-windows-i586.cab#Version=1,4,2,0">
<PARAM name="code" value="XYZApp.class">
<PARAM name="codebase" value="html/">
<PARAM name="type" value="application/x-java-applet;jpi-version=1.4.2">
<PARAM name="model" value="models/HyaluronicAcid.xyz">
<PARAM name="scriptable" value="true">
No Java 2 SDK, Standard Edition v 1.4.2 support for APPLET!!
</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。
下面是这个标签的示例:
<OBJECT classid="java:Sample2.class"
type="application/x-java-applet"
archive="Sample2.jar"
height="300" width="450" >
<PARAM name="model" value="models/HyaluronicAcid.xyz">
</ 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两种浏览器。
示例:
<OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
width="200" height="200" align="baseline"
codebase="http://java.sun.com/products/plugin/1.4/jinstall-14-win32.cab#Version=1,4,0,mn">
<PARAM NAME="code" VALUE="XYZApp.class">
<PARAM NAME="codebase" VALUE="html/">
<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="200"
height="200" align="baseline" code="XYZApp.class"
codebase="html/" 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>
3.2 利用IE的条件注释
IE识别如下样式的条件注释(Conditional Comments):
<!--[if !IE]>
非IE浏览器时的代码
<![endif]-->
这个条件注释只有IE识别,其他浏览器会把这两行作为普通的HTML注释忽略。因此,可以用下面的形式来适应所有的浏览器:
<!--[if !IE]> Firefox and others will use outer object -->
<object classid="java:Sample2.class"
type="application/x-java-applet"
archive="Sample2.jar"
height="300" width="450" >
<!--<![endif]-->
<!-- MSIE (Microsoft Internet Explorer) will use inner object -->
<object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
codebase="http://java.sun.com/update/1.5.0/jinstall-1_5_0-windows-i586.cab"
height="300" width="450" >
<param name="code" value="Sample2" />
<param name="archive" value="Sample2.jar" />
<strong>
This browser does not have a Java Plug-in.
<br />
<a href="http://java.sun.com/products/plugin/downloads/index.html">
Get the latest Java Plug-in here.
</a>
</strong>
</object>
<!--[if !IE]> close outer object -->
</object>
<!--<![endif]-->
对于IE浏览器,它会忽略条件注释之间的代码,因此只会看到<object classid="clsid:..这个标签内的内容。对于非IE的其他浏览器,会忽略HTML注释,并且不会解释clsid这个属性,因此也会忽略<object classid="clsid:..>…</object>之间的内容,也就是只会看到<object classid="java:…的内容。
这种方法可以适应所有的浏览器。
3.3 利用JavaScript
各种主流浏览器的当前版本都能够支持JavaScript,因此我们可以用JavaScript来判断浏览器的版本,然后输出合适的HTML代码。这种方式能支持大多数主流的浏览器,如IE、Netscape Navigator、Firefox等。
示例如下:
<script language="Javascript">
var _app = navigator.appName;
if (_app == 'Netscape') {
document.write('<embed code="Applet1.class"',
'width="200"',
'height="200"', 'type="application/x-java-applet;version=1.5.0">');
}
else if (_app == 'Microsoft Internet Explorer') {
document.write('<OBJECT ',
'classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"',
'width="200"',
'height="200">',
'<PARAM name="code" value="Applet1.class">',
'</OBJECT>');
}
else {
document.write('<p>Sorry, unsupported browser.</p>');
}
</script>
摘要:一个开发好的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的地址。
下面是这个标签的一个例子:
<APPLET code="XYZApp.class" codebase="html/" archive="Sample.jar"
align="baseline" width="200" height="200">
<PARAM name="model" value="models/HyaluronicAcid.xyz">
No Java 2 SDK, Standard Edition v 1.4.2 support for APPLET!!
</APPLET>
2.2 Embed Tag
这是Netscape Navigator 4.x浏览器支持的嵌入Applet的标签,其他浏览器很少支持这个标签的,因此实际应用的很少。这个标签不支持以内嵌Param标签的方式为Applet传递参数。
下面是这个标签的例子:
<EMBED type="application/x-java-applet;jpi-version=1.4.1" width="200"
height="200" align="baseline" code="XYZApp.class"
codebase="html/" model="models/HyaluronicAcid.xyz"
pluginspage="http://java.sun.com/j2se/1.4.1/download.html">
<NOEMBED>
No Java 2 SDK, Standard Edition v 1.4.1 support for APPLET!!
</NOEMBED>
</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时,都要使用这个标签。
下面是这个标签的示例:
<OBJECT classid="clsid:CAFEEFAC-0014-0002-0000-ABCDEFFEDCBA"
width="200" height="200" align="baseline"
codebase= http://java.sun.com/products/plugin/autodl/jinstall-1_4_2-windows-i586.cab#Version=1,4,2,0">
<PARAM name="code" value="XYZApp.class">
<PARAM name="codebase" value="html/">
<PARAM name="type" value="application/x-java-applet;jpi-version=1.4.2">
<PARAM name="model" value="models/HyaluronicAcid.xyz">
<PARAM name="scriptable" value="true">
No Java 2 SDK, Standard Edition v 1.4.2 support for APPLET!!
</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。
下面是这个标签的示例:
<OBJECT classid="java:Sample2.class"
type="application/x-java-applet"
archive="Sample2.jar"
height="300" width="450" >
<PARAM name="model" value="models/HyaluronicAcid.xyz">
</ 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两种浏览器。
示例:
<OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
width="200" height="200" align="baseline"
codebase="http://java.sun.com/products/plugin/1.4/jinstall-14-win32.cab#Version=1,4,0,mn">
<PARAM NAME="code" VALUE="XYZApp.class">
<PARAM NAME="codebase" VALUE="html/">
<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="200"
height="200" align="baseline" code="XYZApp.class"
codebase="html/" 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>
3.2 利用IE的条件注释
IE识别如下样式的条件注释(Conditional Comments):
<!--[if !IE]>
非IE浏览器时的代码
<![endif]-->
这个条件注释只有IE识别,其他浏览器会把这两行作为普通的HTML注释忽略。因此,可以用下面的形式来适应所有的浏览器:
<!--[if !IE]> Firefox and others will use outer object -->
<object classid="java:Sample2.class"
type="application/x-java-applet"
archive="Sample2.jar"
height="300" width="450" >
<!--<![endif]-->
<!-- MSIE (Microsoft Internet Explorer) will use inner object -->
<object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
codebase="http://java.sun.com/update/1.5.0/jinstall-1_5_0-windows-i586.cab"
height="300" width="450" >
<param name="code" value="Sample2" />
<param name="archive" value="Sample2.jar" />
<strong>
This browser does not have a Java Plug-in.
<br />
<a href="http://java.sun.com/products/plugin/downloads/index.html">
Get the latest Java Plug-in here.
</a>
</strong>
</object>
<!--[if !IE]> close outer object -->
</object>
<!--<![endif]-->
对于IE浏览器,它会忽略条件注释之间的代码,因此只会看到<object classid="clsid:..这个标签内的内容。对于非IE的其他浏览器,会忽略HTML注释,并且不会解释clsid这个属性,因此也会忽略<object classid="clsid:..>…</object>之间的内容,也就是只会看到<object classid="java:…的内容。
这种方法可以适应所有的浏览器。
3.3 利用JavaScript
各种主流浏览器的当前版本都能够支持JavaScript,因此我们可以用JavaScript来判断浏览器的版本,然后输出合适的HTML代码。这种方式能支持大多数主流的浏览器,如IE、Netscape Navigator、Firefox等。
示例如下:
<script language="Javascript">
var _app = navigator.appName;
if (_app == 'Netscape') {
document.write('<embed code="Applet1.class"',
'width="200"',
'height="200"', 'type="application/x-java-applet;version=1.5.0">');
}
else if (_app == 'Microsoft Internet Explorer') {
document.write('<OBJECT ',
'classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"',
'width="200"',
'height="200">',
'<PARAM name="code" value="Applet1.class">',
'</OBJECT>');
}
else {
document.write('<p>Sorry, unsupported browser.</p>');
}
</script>
相关文章推荐
- 在多种浏览器中嵌入Applet
- 嵌入在Web项目中的Applet如何共享浏览器请求创建的Session
- Applet小程序嵌入浏览器中显示
- 浏览器无法显示嵌入网页代码中的Applet java程序
- 嵌入在html文件中的Applet程序无法显示的问题解决方案 201
- 如何在页面中嵌入plugin对象(兼容不同浏览器)
- 兼容多种浏览器的,多行文本多余显示省略号(···)的方法
- [js开源组件开发]js手机端浮层控件,并有多种弹出小提示,兼容pc端浏览器
- 安卓突击:系统上安装了多种浏览器,能否指定某浏览器访问指定页面
- 如何在页面中嵌入plugin对象(兼容不同浏览器)
- 在java应用程序中嵌入浏览器
- js获得指定控件输入光标的坐标兼容IE,Chrome,火狐等多种主流浏览器
- atitit. 浏览器插件 控件 applet 的部署,签名总结 浏览器 插件 控件 的签名安全机制o9o
- MFC应用程序中嵌入一个谷歌cef浏览器
- 系统上安装了多种浏览器,能否指定某浏览器访问指定页面?请说明原由。
- 支持多种浏览器下载的文件名处理方案
- [iOS] 高仿 QQ、微信效果的图片浏览器(支持原图和缩略图、多种手势、CocoaPods)
- HTML5浏览器嵌入窗口程序解决方案
- HO8001: 各浏览器下使用 OBJECT 元素和 EMBED 元素嵌入 Flash 存在差异
- javascript 获取页面高度(多种浏览器