实现applet跨框架和浏览器窗口彼此通信

摘要

您可能认为能让 applet 彼此通信的唯一选择就是使用 getApplet。不幸的是,getApplet 方法仅返回与发出调用的 applet 在同一个 HTML 页面上的 applet,这样就限制了您通过 applet 间的通信构建有趣界面的方式。这篇技巧说明的替代方法能使处于不同框架甚至不同浏览器窗口中的 applet 彼此调用对方的方法。

java.applet 包中的 AppletContext 类包含两个成员方法,即 getApplet 和 getApplets。通过使用这两个方法,一个 applet 就可以找到其他 applet 并调用它们的方法。要这样做必须满足下面的安全要求:

这些 applet 来自同一个服务器上的同一个目录中。

这些 applet 运行于同一个浏览器窗口中的同一个页面上。

这样设计安全限制可能有很好的原因;但是,后一个要求限制了利用 applet 间的通信制作有趣的多 applet 界面的方式。

试考虑这样一种情况:

您刚编好一个很好的股票市场交易 applet,并决定为它编写一个良好的帮助系统。您希望帮助系统也是一个 applet,并希望将它与股票市场交易 applet 在不同的浏览器框架中运行。您作出这个决定可能是出于网站结构方面的考虑,也可能是出于始终显示帮助系统的需要。另外,您希望使帮助系统根据用户当前在股票交易 applet 中进行的操作转至正确的信息/指导(就像 Microsoft Office 套件中的“回形针”一样)。您甚至计划在帮助系统中编制向导,这些向导可远程指出问题,并可远程执行股票市场交易 applet 中的任务。

这一方案中体现的思想很不错。但是,因为这两个 applet 处于不同的页面上,所以 AppletContext 中的 Java API 无法帮助您实现这个想法 -- 但这篇技巧可以帮助您。

使用 AppletContext API

在说明 applet 间通信的替代机制前,我将首先简要说明一下 getApplet 和 getApplets 这两个方法是如何工作的。一个 applet 通过使用 getApplet 方法可以按名称找到同一个 HMTL 页面中的另一个 applet,而通过使用 getApplets 方法可以找到同一个页面上的所有 applet。这两个方法如果成功执行,则会向调用者返回一个或多个 Applet 对象。调用者一旦找到一个 Applet 对象,它就可能调用这个 Applet 的公用方法。

假定有下面这样一段 HTML 代码:

<applet code="Applet1" width="400" height="100" name="app1">
  </applet>
  <br>
  <applet code="Applet2" width="400" height="100" name="app2">
  </applet>
  <br>

通过使用 applet 标记中的 name 属性,您就可以用下面的方式引用一个特定的 applet:

Applet theOtherApplet = getApplet("app1");

theOtherApplet.anyMethod(); //调用任一个公用方法

或者,您也可以用以下的代码来检索这个页面上的所有 applet:

  Enumeration allAppletsOnSamePage = getApplets();
  while(allAppletsOnSamePage.hasMoreElements()) {
    Applet appl = (Applet) allAppletsOnSamePage.nextElement();
    appl.anyMethod(); //调用任一个公用方法
  }

当发出调用的 applet 在它所在的同一个 HTML 页面上检索到一个或几个 applet 之后,它就可以调用这些 applet 的公用方法。

时间: 2024-08-22 05:48:22

实现applet跨框架和浏览器窗口彼此通信的相关文章

Javascript中浏览器窗口的基本操作总结_javascript技巧

窗口位置 [1]获取 浏览器(firefox不支持)提供了screenLeft和screenTop属性,分别用于表示窗口相对于屏幕左边和上边的位置 在窗口最大化的情况下,运行下列代码时,各个浏览器返回的值并不相同.chrome返回left:0;top:0.而IE则返回left:0;top:56(若有菜单栏,则返回left:0;top:78),这是因为IE中保存的是从屏幕左边和上边到由window对象表示的页面可见区域的距离.safari则由于自身的bug,返回left:-8;top:-8 //移

《Android 应用案例开发大全(第二版)》——6.4节跨应用程序访问窗口

6.4 跨应用程序访问窗口 Android开发权威指南(第二版) 在前面曾介绍过可以通过显式和隐式的方式访问窗口,显式方式只能访问应用程序内部的窗口,而隐式方式无论当前应用程序,还是其他应用程序中的窗口都可以访问.不过阅读了本节的内容后读者就会改变这种观念.因为Android足够强大,已经完全打通不同应用程序之间的界限了,也就是说不同应用程序之间的交互几乎和应用程序内部的交互完全一样.因此在一个应用程序中同样可以通过直接指定另外一个应用程序中窗口类的方式访问该窗口,也就是跨应用程序显式调用.所以

js/jquery获取浏览器窗口可视区域高度和宽度以及滚动条高度实现代码_jquery

获取浏览器窗口的可视区域高度和宽度,滚动条高度有需要的朋友可参考一下.IE中,浏览器显示窗口大小只能以下获取: 代码如下复制代码 复制代码 代码如下: document.body.offsetWidth document.body.offsetHeight 在声明了DOCTYPE的浏览器中,可以用以下来获取浏览器显示窗口大小: 代码如下复制代码 复制代码 代码如下: document.documentElement.clientWidth document.documentElement.cli

Silverlight——施工计划日报表(四)——自适应浏览器窗口

转自http://www.cnblogs.com/codelove/archive/2011/06/12/2079232.html 在很多情况下,从用户体验的角度考虑,我们都希望我们的Silverlight程序能够适应各种大小的浏览器窗口或者框架,如图所示:   那么如何使Silverlight程序能够自适应浏览器窗口的大小呢,即使在动态改变浏览器窗口的时候也不例外.Google了几次,都没找到自己所需要的方案,于是只好自己来解决了.   首先,有没有办法在Silverlight的程序代码中获取

CSS实现元素相对于浏览器窗口进行定位

文章简介:CSS实现相对浏览器窗口定位彻底研究. Web Developer / Designer 经常需要将一个元素"固定"在页面的某个位置.例如弹出窗口.漂浮广告位等--本文将详细介绍简单CSS实现元素相对于浏览器窗口进行定位的方法. position:fixed生成绝对定位的元素,相对于浏览器窗口进行定位.元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规

网页制作基础技巧 框架(帧窗口)间的交互

技巧|交互|网页 在多窗口的分帧页面中,各分窗口之间的信息交互是经常的事.在导航窗口中点了超级链接,那么如何在另一窗口中打开链接的网页呢?我在这个窗口中按下按钮,能在另一个窗口中写信息吗?窗口那么多,又如何识别窗口呢?请看下面的例子. 一.在导航窗口点击链接,在另一窗口打开网页 现有一分帧页面如上图所示的,A窗口是网站logo及广告,B窗口是导航栏,C是显示页面的窗口.该分帧页面的源代码为: <frameset rows="20%,*">  <frame name=&

网页制作基础技巧 框架(帧窗口)技巧

技巧|网页 帧窗口是一种复杂的页面技术,应用帧窗口使得用户可以在同一个浏览器窗口中浏览不同网站的内容,可以在一个小窗口中发出查询命令而在另一个小窗口中接收查询结果.实现帧窗口的思路是将浏览器窗口按照功能分割成多个小窗口.每个窗口都对应有自己的HTML页面,按照一定的组合方式组合在一起,以实现特殊的效果. 在HTML中用<frameset>(分割窗口标记)来分割窗口,<frameset>在多窗口页面中的地位就相当于<body>在普通单窗口页面中的地位,在页面中用<f

Dreamweaver MX 2004 行为之打开浏览器窗口

dreamweaver|浏览器 · 打开浏览器窗口 使用"打开浏览器窗口"动作在一个在新的窗口中打开指定的URL.您可以指定新窗口的属性(包括其大小).特性(它是否可以调整大小.是否具有菜单栏等)和名称. 如果不指定该窗口的任何属性,在打开时它的大小和属性与打开它的窗口相同.指定窗口的任何属性都将自动关闭所有其它未显式打开的属性.例如,如果您不为窗口设置任何属性,它将以 800 x 600 像素的大小打开并具有导航条.地址工具栏.状态栏和菜单栏.如果您将宽度显式设置为 400.将高度设

用JS获取视窗或浏览器窗口的尺寸

包含有针对IE和Firefox两种浏览器的JS语法,详细请见文章... 获取视窗或浏览器窗口的尺寸 有时需要找出浏览器的有效窗口空间的尺寸,一般成为"视窗". IE 语法: var myBrowserSize = [0, 0]; myBrowserSize[0] = document.documentElement.clientWidth; myBrowserSize[1] = document.documentElement.clientHeight; Firefox 语法: var