代码之家  ›  专栏  ›  技术社区  ›  Grumdrig

在窗口卸载时使用HTML5WebSQL保存状态

  •  0
  • Grumdrig  · 技术社区  · 14 年前

    我使用websqlapi在页面上存储一些信息;我想在用户关闭页面或导航离开时保存页面的状态,因此,我从以下内容开始:

    window.onunload = function () {
      db.transaction(function (tx) {
        executeSql("INSERT INTO State (foo) VALUES (?)", [foo]);
      });
    };
    

    但是,这是异步的,因此它不会在页面消失之前完成。

    alert("Saved!"); 在我生命的尽头 window.onunload ,这会延迟卸载,直到DB有机会执行它的操作,但是如果可以避免的话,我宁愿不要发出警报。

    onunload 运行一段时间,警报就是这样做的。

    (顺便说一句,阻止任何建议我使用同步 openDatabaseSync

    3 回复  |  直到 14 年前
        1
  •  1
  •   Jesse Dhillon    14 年前

    你能访问WebSocket吗?

    insert 并在查询完成后关闭连接。

    这是我唯一能想到的,我不确定这些接口是否支持这种用法。我通过思考如果我有一个服务器,我将如何做到这一点:我将使用到服务器的同步网络连接来写入状态。

    另外,我不确定unload事件是否可以被阻止一段不确定的时间,但是一些google上的“unload synchronous ajax”表明它可能被阻止。

    更新时间:7/19 10:26pm PDT

    浏览器WebSockets是只发送的,不能打开套接字进行监听。

        2
  •  0
  •   Grumdrig    14 年前

    我只想告诉后代,我遇到的另一个想法是打开一个带有超时的模式对话框,如下所示:

    window.showModalDialog('javascript:document.writeln ("<script>window.setTimeout(function () { window.close(); }, 100);</script>")');
    

        3
  •  0
  •   Michael    14 年前

    据说有一种方法可以使SQL调用同步。

    然而,这一部分还没有在任何浏览器中实现。 而且规范草案没有任何进展,因为只有一个DB-SQLite。

    did the trick . 如果我知道他们是怎么做到的。如果你能弄明白,请更新这个线程。

    推荐文章