首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >navigator.onLine

navigator.onLine
EN

Stack Overflow用户
提问于 2010-02-25 02:43:09
回答 2查看 9.9K关注 0票数 9

我正在使用在http://www.w3.org/TR/offline-webapps/找到的不完整的示例

但我很痛苦地看到其中的评论如下:

代码语言:javascript
运行
复制
"renders the note somewhere", and
"report error", and
"// …"

那么,有人能帮我写一个有效的例子吗?这是我到目前为止所得到的:

代码语言:javascript
运行
复制
<!DOCTYPE HTML>
<html manifest="cache-manifest">
<head>
<script>
var db = openDatabase("notes", "", "The Example Notes App!", 1048576);

function renderNote(row) {
  // renders the note somewhere
}
function reportError(source, message) {
  // report error
}

function renderNotes() {
  db.transaction(function(tx) {
    tx.executeSql('CREATE TABLE IF NOT EXISTS Notes(title TEXT, body TEXT)',
      []);
    tx.executeSql(‘SELECT * FROM Notes’, [], function(tx, rs) {
      for(var i = 0; i < rs.rows.length; i++) {
        renderNote(rs.rows[i]);
      }
    });
  });
}

function insertNote(title, text) {
  db.transaction(function(tx) {
    tx.executeSql('INSERT INTO Notes VALUES(?, ?)', [ title, text ],
      function(tx, rs) {
        // …
      },
      function(tx, error) {
        reportError('sql', error.message);
      });
  });
}


</script>
<style>
label {
    display:block;
}
</style>
</head>
<body>
<form>
<label for="mytitle">Title:</label>
<input name="mytitle">
<label for="mytext">Text:</label>
<textarea name="mytext"></textarea>
<!-- There is no submit button because I want to save the info on every keystroke -->
</form>
</body>
</html>

我也知道我必须把它合并到某个地方:

代码语言:javascript
运行
复制
if (navigator.onLine) {
   // Send data using XMLHttpRequest
} else {
   // Queue data locally to send later
}

但我也不确定我会把它绑在一起。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-08 07:55:19

在我看来,你是在找类似的东西

代码语言:javascript
运行
复制
function save() {
    if (navigator.onLine) {
       // Send data using XMLHttpRequest
    } else {
       // Queue data locally to send later
    }
}

<textarea name="mytext" onkeyup="save();"></textarea>

然而,使用像Robusto提到的超时(我认为这也是GMail做事情的方式)。

如果你担心的是“在某个地方渲染笔记”之类的问题,那么这部分需要你来填写。您必须通过从数据库中选择数据,然后将其填充到页面上的元素中来填充此内容。

代码语言:javascript
运行
复制
function renderNote(row) {
    $('notes').innerHtml = $('notes').innerHtml + row.body;
}

这是我能从目前的规范中得到的最好的结果--但是,请注意,该规范目前还不完整,您还无法在w3站点上找到它的最终版本。

如果您对如何在本地对数据进行排队感到好奇,那么即使是数组也可以做到这一点。将每个本地请求推送到阵列的末尾(假设同时将其保存在本地),并定期检查是否有活动的internet连接。如果internet连接可用,则重复将顶部元素从数组中弹出并通过网络发送,直到数组为空。

票数 10
EN

Stack Overflow用户

发布于 2010-02-25 15:42:31

如果你可以同步你的本地数据库和一个在线仓库,你可能不需要‘navigator.online’,因为你已经在本地存储了。不过,更好的做法是为“离线”和“在线”事件添加eventlisteners (在window对象上),并使用这些事件触发(和取消)同步。

查看在线/离线状态处理on this hacks.mozilla.org page的示例,并查看this ajaxian article about the webkit stickynotes html5-implementation (虽然在线时不同步)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2328565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档