在多种浏览器中嵌入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.mzph.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。 新建模块为…