因此,我为Google Chrome提供了一个记事本扩展程序,可以同步并显示用户存储的备注。目前我的问题如下。
下载后第一次运行扩展程序时,单词“未定义”'显示在可编辑的div中(id = edit_notepad
)。我希望它只是空白而不是显示任何东西。显然,我知道它未定义,因为用户还没有能够添加任何文本。
初次运行时显示的内容的图片:
在我的内容脚本中,这是我的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"当记事本关闭并重新打开时。
答案 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
。