【问题标题】:Keep form data when opening and closing extension?打开和关闭扩展时保留表单数据?
【发布时间】:2016-09-04 23:18:58
【问题描述】:

我正在为 Google Chrome 开发一个扩展程序,用户可以通过它填写表单。

工作原理:

  1. 用户点击扩展图标,会出现一个带有表单的弹出窗口;
  2. 开始填写表格;
  3. 结束填充;
  4. 发送表单;
  5. 结束。

     

问题:

  1. 用户点击扩展图标,会出现一个带有表单的弹出窗口;
  2. 开始填写表格;
  3. 用户无意中点击了扩展图标或在弹出窗口之外点击;
  4. 分机关闭;
  5. 用户再次打开;
  6. 已经填写的数据丢失了;
  7. 扩展变得不可行;
  8. 结束。

    我需要知道如何不丢失这些数据,但我什至不知道如何谷歌它。你能帮帮我吗?

【问题讨论】:

  • 我投票结束这个问题,因为 Stack Overflow 上的问题应该是英文的。
  • 我的错!全部翻译。你能帮我吗? @GordonLinoff
  • 你还需要翻译标题。
  • edit 成为主题的问题:包括一个完整 minimal reproducible example 重复该问题。通常,包括一个manifest.json、一些后台内容脚本。寻求调试帮助的问题(“为什么这段代码不工作?”)必须包括:►期望的行为,►特定问题或错误►必要的最短代码重现它在问题本身。没有明确问题陈述的问题对其他读者没有用处。请参阅:“如何创建 minimal reproducible example”、What topics can I ask about here?How to Ask

标签: javascript forms google-chrome google-chrome-extension


【解决方案1】:

简而言之,这是如何做到的:

  1. 每次输入更改时,将其保存到持久存储中
  2. 在弹出加载时,加载保存的数据
  3. 成功完成表单后,清除保存的数据

Chrome 扩展中有不同的持久存储选项,但最“原生”的是chrome.storage API。您可以在in the docs 和这里找到示例。

这包括加载和保存数据,但是如何捕捉输入变化?好吧,有一个有用的 oninput 表单字段事件。

所以基本思路:

var keys = [/* a list of your fields' ids as keys */];

document.addEventListener("DOMContentLoaded", function() {
  chrome.storage.local.get(keys, function(data) {
    /* find the form fields and set their state from data, for example 
       (depends on the field type - maybe not .value) */
    for (let key of keys) {
      let field = document.getElementById(key);
      field.value = data[key];
      field.oninput = saveData;
    }
  });
})

function saveData(e) {
  chrome.storage.local.set({[this.id]: this.value});
}

function clearData() { // To be called when you submit your data
  chrome.storage.local.remove(keys);
}

这是一个非常粗略的草稿;尝试从那里得到这个想法并加以调整。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    相关资源
    最近更新 更多