如何设置可编辑div的初始值?

时间:2016-11-13 14:23:58

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

因此,我为Google Chrome提供了一个记事本扩展程序,可以同步并显示用户存储的备注。目前我的问题如下。

下载后第一次运行扩展程序时,单词“未定义”'显示在可编辑的div中(id = edit_notepad)。我希望它只是空白而不是显示任何东西。显然,我知道它未定义,因为用户还没有能够添加任何文本。

初次运行时显示的内容的图片:

Picture of what's displayed on initial run.

在我的内容脚本中,这是我的chrome.storage获取和设置功能(可以正常工作):

document.body.onload = function() {
  chrome.storage.sync.get("edit_notepad", function(items) {
    if (!chrome.runtime.error) {
      console.log(items);
      document.getElementById("edit_notepad").innerHTML = items.edit_notepad;
    }
  });
}

document.getElementById("edit_notepad").onkeyup = function() {
  var d = document.getElementById("edit_notepad").innerHTML;
  chrome.storage.sync.set({ "edit_notepad" : d }, function() {
    if (chrome.runtime.error) {
      console.log("Runtime error.");
    }
  });
}

我认为我需要某种if语句,但经过几个小时的游戏,我迷失了它究竟包含的内容。我一直遇到的问题是,无论我将edit_notepad的初始值设置为什么,它总是会回复到" undefined"即使用户写了一些笔记!例如"这是笔记测试"会回复到" undefined"当记事本关闭并重新打开时。

1 个答案:

答案 0 :(得分:1)

嗯,一个简单的方法是在chrome.storage.sync.get()中指定一个默认值。执行此操作将在存储中不存在密钥时应用默认值。但是,如果您要替换可能已存在的任何内容,则更好的解决方案是在没有值或存储无效值时设置内容。唯一有效的值是字符串。这样可以防止在没有存储值时覆盖网页提供的任何默认值。因此,类似以下内容的$lastExercise = ""; // my edit while($workoutrowridge = $workoutresultridge->fetch_assoc()) { if($workoutrowridge['ExerciseName'] != $lastExercise ){ $workoutoutputridge .= "<tr><td>Exercise</td><td>Reps</td><td>Weight</td></tr>"; } $lastExercise = $workoutrowridge['ExerciseName']; //the rest is your original code $workoutoutputridge .= '<tr>'; $workoutoutputridge .= '<td>'.$workoutrowridge['ExerciseName'].'</td>'; $workoutoutputridge .= '<td>'.$workoutrowridge['Reps'].'</td>'; $workoutoutputridge .= '<td>'.$workoutrowridge['Weight'].'</td>'; $workoutoutputridge .= '</tr>'; } 语句应该有效(或者,您可以测试if

!== 'undefined'

注意:在每个密钥上存储可编辑document.body.onload = function() { chrome.storage.sync.get("edit_notepad", function(items) { if (!chrome.runtime.error) { console.log(items); if(typeof items.edit_notepad === 'string') { document.getElementById("edit_notepad").innerHTML = items.edit_notepad; } } }); } 的内容将导致许多用户同时遇到MAX_WRITE_OPERATIONS_PER_MINUTE and MAX_WRITE_OPERATIONS_PER_HOUR quotas。您需要有一些其他标准才能写入<div>。也许您可以暂时将值存储在storage.sync中,并且每隔几分钟暂时存储到storage.local