json 通过单击按钮将不同的值从剪贴板存储到localStorage

7eumitmz  于 2023-02-10  发布在  其他
关注(0)|答案(1)|浏览(386)

我有一个简单的项目,其中有一些组合框,可以将值设置为localStorage(39个组合框)。我找到了一种将整个localStorage复制到剪贴板的方法

// копирование всего localStorage в буфер обмена
async function copyJson() {
  try {
    await navigator.clipboard.writeText(
      JSON.stringify(localStorage)
    );
      console.log('Content copied to clipboard');
      /* Resolved - text copied to clipboard successfully */
  } catch (err) {
    console.error('Failed to copy: ', err);
    /* Rejected - text failed to copy to the clipboard */
  }
}

然后,我可以清除本地存储:

// полная очистка localStorage
function clearJson() {
  localStorage.clear();
}

现在这是明确的,我需要从剪贴板粘贴数据,这可能看起来像这样:

{"postval":"Пусто","kuzval1":"Пусто","kuzparkval11":"Пусто"}

我试着用这个代码:

// вставка localStorage (В разработке!)
var raw = navigator.clipboard.readText(JSON.stringify())
// This will check if raw is valid JSON
async function loadJson(){
try {
  localStorage.setItem(raw,raw);
}
catch (e) {
  // show error to user
}
}

但它并没有粘贴值和键,而是存储了以下内容:

{"[object Promise]":"[object Promise]"}

我怎样才能克服这个问题?

ygya80vv

ygya80vv1#

readText已经返回了一个字符串,所以你不需要字符串化,而且setItem一次只能设置一个字符串键,所以你需要遍历你的数据,一个一个地设置。

// вставка localStorage (В разработке!)
var raw = navigator.clipboard.readText()
// This will check if raw is valid JSON
async function loadJson(){
  const storageData = JSON.parse(raw)
  try {
    for (const key in storageData) {
     
      localStorage.setItem(key, storageData[key]);
    }
  }
  catch (e) {
    // show error to user
    console.error(e)
  }
}

相关问题