【问题标题】:What happens with previous HTML page after users navigate away from it in JavaScript?用户在 JavaScript 中离开之前的 HTML 页面后会发生什么?
【发布时间】:2014-08-29 03:04:05
【问题描述】:

假设我有两个 HTML 页面,我们称它们为 page1.html 和 page2.html。然后用户通过调用location对象的assign或replace方法从page1.html导航到page2.html。我有一些问题如下:

Q1:page1.html 的 DOM 树会发生什么,当我们从 page2.html 导航回到它时,它会被卸载并重新加载吗?我可以从 page2.html 引用 page1.html 的 DOM 树吗?

Q2:如果我在 page1.html 中的套接字对象中维护套接字连接,我可以将该套接字对象传递给 page2.html 吗?我可以在 page2.html 中监听该套接字对象的事件吗?

Q3:我可以同时拥有 page1.html 和 page2.html 的共同对象吗?我可以做一些事情,比如维护一个计时器来为该对象中的 page1.html 和 page2.html 执行常见任务?该对象类似于其他 OOP 语言中的单例对象。

【问题讨论】:

  • 恐怕你不能做这些事情。这是一个全新的页面,有自己的 DOM 和 Javascript 环境,旧的将被卸载/销毁,唯一的通信方式是通过查询、localStorage 或类似的东西传递数据(这显然非常有限) .
  • 人们过去常常使用 iframe 作为“粘性容器”来解决这个问题。我想已经不是那么多了。

标签: javascript navigation


【解决方案1】:

Q1:page1.html 的 DOM 树会发生什么,当我们从 page2.html 导航回到它时,它会被卸载并重新加载吗?

或多或少。浏览器缓存以前访问过的页面,并且在使用“返回”导航重新访问时可能不会触发新的加载事件。有些会将页面保持在以前的状态,有些则不会。

我可以从 page2.html 引用 page1.html 的 DOM 树吗?

没有。从 DOM 的角度来看,page1.html 已经不复存在了。

Q2:如果我在 page1.html 中的套接字对象中维护套接字连接,我可以将该套接字对象传递给 page2.html 吗?

不,但是您可以在 page1 关闭时对其进行序列化,将其发送到服务器,然后将其包含在 page2 中,以便恢复(cf JSON)。

我可以在 page2.html 中监听该套接字对象的事件吗?

如果它仍在 page1 中,则不会,但您可以在服务器上模拟该行为。

Q3:能否同时拥有 page1.html 和 page2.html 的共同对象。

不使用 JavaScript。但是,如果您将对象传递给 page2(例如通过序列化或通过服务器的其他方法),那么您也许可以再次将其传递回来。

我可以做一些事情,比如维护一个计时器来为该对象中的 page1.html 和 page2.html 执行常见任务?

不,但你可以再次在服务器端做这些事情。

此对象类似于其他 OOP 语言中的单例对象。

酷。

如果您描述了您实际尝试做的事情(即您尝试实现的结果,而不是您用来做这件事的方法),则可能会建议一个合适的架构或设计模式,例如正如 Abhi 所暗示的那样,单页应用程序可能适合。

【讨论】:

  • 谢谢!我正在为三星 Gear 设备开发一个应用程序,我想将移动设备和 Gear 设备之间的套接字连接保持在某个地方,这样我就可以知道何时有来自移动设备的新消息。 (您可以认为移动设备是服务器端,而 Gear 设备是客户端-服务器架构中的客户端)。我也认为可能是一页应用程序适合我的应用程序。你能给我关于那个主题的教程吗?非常感谢!
猜你喜欢
  • 1970-01-01
  • 2010-12-11
  • 2011-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-02
  • 2010-11-22
相关资源
最近更新 更多