如何防止Applet跨网页卸载?

时间:2009-03-16 22:23:39

标签: java javascript caching applet

我有一个大的小程序需要大约40秒来初始化(出租车被缓存,所以忽略这个问题的下载时间)。

问题是,如果用户转到启动applet的页面A(单个窗口),然后导航到页面B,则卸载applet。如果用户返回到页面A,则会再次产生40秒的初始化时间。

我希望能够启动applet,只需要一次40秒的初始化时间。 applet需要驻留在单个浏览器窗口内(与我的Web应用程序相同的窗口)。换句话说,我无法在弹出窗口中启动applet。

有没有人对如何防止applet卸载有任何创意?

4 个答案:

答案 0 :(得分:1)

唯一的选择是将内容放在包含整个文档的iframe中,并使用applet的绝对定位。

<body>
 <iframe id='content' src='FIRST_URL'></iframe>
 <object id='applet'></object>
</body>

用这样的css:

#content {
  width:100%;
  height: 100%;
}

#applet {
  position: absolute;
  left: LEFT_POSITION;
  top: TOP_POSITION;
  width: DESIRED_WIDTH;
  height: DESIRED_HEIGHT;
}

有许多缺点:

  • 小程序将始终位于同一位置,无论页面
  • 您将获得iframe全宽和全高,尤其是在IE
  • 你可能也会让applet正常显示(iframe上面的一个对象,我无法想象你会遇到什么麻烦)
  • 如果您的用户点击指向您网站之外的链接,小程序将会停留,除非您为链接设置目标(即target ='top'或target ='__ blank')

答案 1 :(得分:1)

您可以通过以下方式显示警告:

if(window.body)window.body.onbeforeunload=function(){if(window.event)window.event.returnValue="UNLOAD MSG";};else window.onbeforeunload=function(){return "UNLOAD MSG";};

这适用于所有浏览器,但您无法更改文本周围的文字。

答案 2 :(得分:0)

将Applet放在不卸载的框架中,或阻止用户转到包含Applet的网页中的另一个页面。

答案 3 :(得分:0)

我想也许有办法弹出一个小小的浏览器窗口并加载applet,然后使用Javascript以某种方式将applet从较小的窗口拉入更大的浏览器。

我认为我不能以这种方式操纵DOM。

还有其他想法吗?