0

Итак, у меня есть блокнот для Google Chrome, который синхронизирует и отображает сохраненные заметки от пользователя. В настоящее время моя проблема заключается в следующем.Как установить начальное значение редактируемого div?

Когда расширение выполняется в первый раз после загрузки, в редактируемом div отображается слово «undefined» (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, он всегда возвращается к «неопределенному», даже когда пользователь написал несколько заметок! например «Это тест заметок» вернется к «неопределенным», когда блокнот будет закрыт и снова открыт.

+0

У вас есть два вопроса здесь. Недостаточно кода или описания, предоставленного для ответа вопрос о возврате назад. необходимо удалить один из возвращающихся назад и [задать новый вопрос] (http://stackoverflow.com/questions/ask), который включает в себя [mcve], который демонстрирует проблему. Пожалуйста, отредактируйте свой вопрос, чтобы удалить свой второй вопрос. – Makyen

ответ

1

Ну, простой способ сделать это - указать значение по умолчанию в вашем chrome.storage.sync.get(). При этом будет использоваться значение по умолчанию, если ключ не существует в хранилище. Однако, учитывая, что вы заменяете любое содержимое, которое может уже существовать, лучшим решением было бы не устанавливать содержимое, если у вас нет значения или недопустимого значения. Единственным допустимым значением будет строка. Это не позволит вам переписать любое значение по умолчанию, предоставленное веб-страницей, если у вас нет сохраненного значения. Таким образом, 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; 
     } 
    } 
    }); 
} 

Примечание: Сохранение содержимого редактируемой <div> на каждом ключе приведет многих пользователей, работающих в обоих MAX_WRITE_OPERATIONS_PER_MINUTE and MAX_WRITE_OPERATIONS_PER_HOUR quotas. Вам нужно будет указать некоторые другие критерии для написания до storage.sync. Возможно, вы можете временно сохранить значение в storage.local и только до storage.sync каждые две минуты.

+0

Это сработало отлично! Спасибо, друг – Alex

+0

Я рад, что смог помочь. – Makyen

Смежные вопросы