javascript - Chrome 扩展程序的 chrome.storage

标签 javascript google-chrome google-chrome-extension user-data

我对 JavaScript 还很陌生,正在创建一个扩展程序来保存用户数据以显示在特定页面(具体来说是 Google 类)上。我尝试过使用 localStorage,但这会将其保存到特定页面的本地存储中。我需要用户能够在 Chrome 中的任何地方保存和访问数据,并且我还需要它在新 session 中可用。

总而言之,我需要三个函数。一种将用户数据保存到 chrome.storage,一种从给定键的 chrome.storage 获取值,另一种列出 chrome.storage 中的所有键。

ma​​nifest.json

{
  "manifest_version": 2,
  "name": "AssignMe for Classroom",
  "short_name": "AssignMe",
  "description": "Create your own assignments on Google Classroom.",
  "version": "1.0",

  "browser_action": {
   "default_icon": "src/icon128.png",
   "default_popup": "popup.html"
  },

  "icons": {
   "16": "src/icon16.png",
   "19": "src/icon19.png",
   "48": "src/icon48.png",
   "128": "src/icon128.png"
  },

  "content_scripts": [{
   "matches": ["https://classroom.google.com/*/not-turned-in/all"],
   "js": ["displayBackground.js"],
   "run_at": "document_end"
  }],

  "permissions": [
   "activeTab",
   "storage",
   "tabs",
   "<all_urls>"
  ]
}

popup.html

<!DOCTYPE html>
<html>
  <head>
  </head>
  <body>
    <form name="newAssignment" onsubmit="return display()">
      <fieldset>
        <legend><strong>New Assignment</strong></legend>
        <strong>Title</strong>
        <input type="text" id="title" spellcheck="false" name="title">
        <br /><br />
        <strong>Date</strong>
        <input type="date" id="date" spellcheck="false" name="date">
        <br />
        <p id="demo">0</p>
        <button type="button" id="do-count">Create Assignment</button>
        <script src="content.js"></script>
      </fieldset>
    </form>
  </body>
</html>

content.js

var title = document.getElementById("title").value;
var date = document.getElementById("date").value;

// Function that saves user data to chrome.storage
// Function that grabs user data from chrome.storage by key
// Function that grabs all keys from chrome.storage

最佳答案

试试这个。

curAssignment = 0;
// save data (you can use .local or .sync)
function saveData() {
  chrome.storage.local.set({
    Data: {
      ["Assignment" + curAssignment]: {
        Title: title,
        Date: date
      }
    }
  }, function() {console.log("Data Saved");});
  curAssignment = curAssignment + 1;
}

["Assignment"+ curAssignment] 根据已保存的项目数为新项目提供唯一的 ID。


// load data
loadedAssignment = 0;
function loadData() {
  chrome.storage.local.get(["Data"], function(results) {
    while (loadedAssignment < results.Data.length) {
      loadedTitle = results.Data[loadedAssignment].Title;
      loadedDate = results.Date[loadedAssignment].Date;

      // your code that handles the loaded data

      loadedAssignment = loadedAssignment + 1;
    }
    curAssignment = results.Data.length;
  });
}

loadData 函数循环访问 chrome.storage.local 中的“Data”项,并获取存储项的标题和日期。

根据StackOverflow你可以使用

// get all items
function getAllItems() {
  chrome.storage.local.get(null, function(items) {
    var allKeys = Object.keys(items);
  });
}

获取存储中的所有项目。

关于javascript - Chrome 扩展程序的 chrome.storage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47400878/

相关文章:

javascript - 使用 jQuery 在悬停时向下移动图标

google-chrome - inject.preload.js 无法从我的开发环境中加载 chrome 中的文件

javascript - 内容脚本仅在重新加载/刷新时加载

css - 为什么 Chrome 浏览器会更改边框大小而不是将其设置为我要求的大小?

css - 出现叠加层时 Div 会摆动

javascript - 访问覆盖的 Chrome 页面

javascript - Chrome 扩展程序 - 当 background.js 不是事件选项卡时,它可以访问本地 html 页面吗?

javascript - 安全 PUBNUB 不会触发回调

javascript - 需要帮助理解 JavaScript 代码

javascript - TinyMCE 添加 bbcode