为什么chrome.storage提供给我[Object Object]? [英] Why does chrome.storage give me [Object object]?

查看:28
本文介绍了为什么chrome.storage提供给我[Object Object]?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建了一个管理Internet历史记录、浏览器Cookie等的Chrome扩展。如果您一周内没有运行它,我会尝试发出通知,因此我使用chrome.storage在您每次使用该扩展时保存时间戳。


以下是我的代码:

<;popup.js>;

function clear()
{
chrome.browsingData.removeHistory({"since":0}, callback);
var now = new Date();
chrome.storage.local.set({key: now}, function() {
console.log('Value is set to ' + now)
}

(回调为空函数)


<;backround.js>;

chrome.storage.local.get(["key"], function(result) {
alert (result.key)
});

当我测试它时,它给了我:

[object Object]

为什么此代码为我提供此时间戳,而不是我保存的时间戳?

推荐答案

JSON类型

chrome.storage和Chrome中的扩展messaging一样,只支持JSON兼容类型:

  • 数字,但不是BigInt
  • 字符串
  • 布尔值truefalse
  • null但不是undefined
  • 由上述简单类型组成的对象/数组
    • 可以嵌套
    • 不能有循环自引用
    • 密钥必须是不是Symbol
    • 的字符串
    • 不支持的部分将被剥离,因此复杂类型将生成{}

它不支持DOM元素、类实例、Set、Map、RegExp、Date等。
这些将存储为{}

要查看实际存储的内容,请在您的代码或DevTools控制台中运行以下命令:

console.log(JSON.parse(JSON.stringify(obj)))

可能的解决方案

Store Date.now(),数字:

chrome.storage.local.set({key: Date.now()})

要重新创建日期:

chrome.storage.local.get('key', data => {
   console.log(new Date(data.key));
})

媒体对象的备选方案

  • 转换为数据URI字符串。
  • 转换为ArrayBuffer并存储在IndexedDB中。
附注:请勿使用+连接console.log中的字符串和对象。使用,如下:console.log('Value is set to', now)

这篇关于为什么chrome.storage提供给我[Object Object]?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆