【问题标题】:How to Prevent an Applet from Unloading across web pages?如何防止小程序跨网页卸载?
【发布时间】:2009-03-16 22:23:39
【问题描述】:

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

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

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

有人对如何防止小程序卸载有任何创意吗?

【问题讨论】:

    标签: java javascript caching applet


    【解决方案1】:

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

    <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 中
    • 您可能还会让小程序正常显示(iframe 顶部的对象,我无法想象您会遇到什么麻烦)
    • 如果您的用户点击指向您网站外部的链接,小程序将保留,除非您为该链接设置目标(即 target='top' 或 target='__blank')

    【讨论】:

    • 如果我这样做,浏览器 URL 将永远不会在页面之间更改。不是我真正想要的。
    【解决方案2】:

    您可以这样显示警告:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        还有其他想法吗?

        【讨论】:

          猜你喜欢
          • 2011-11-24
          • 2017-02-01
          • 2023-04-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-04
          • 2019-06-25
          • 2015-05-01
          相关资源
          最近更新 更多