2013-07-30 4 views
1

Я пытаюсь сохранить данные, которые пользователь вводит внутри текстового поля в popup.html. Используя jQuery на window unload, данные должны быть синхронизированы, а по window ready данные должны быть восстановлены. Однако при открытии popup.html содержание текстового поля составляет undefined. Это код JQuery, который я погрузки в popup.html:chrome.storage.sync не сохраняет данные

$(window).unload (
    function save() { 
     var textarea = document.querySelector("#contacts").value; 
     // Old method of storing data locally 
     //localStorage["contacts"] = textarea.value; 

     // Save data using the Chrome extension storage API. 
     chrome.storage.sync.set({contacts: textarea}, function() { 
      console.log("Contacts saved"); 
     }); 
    }); 

$(window).ready(
    function restore() { 
     var textarea = document.querySelector("#contacts"); 
     // Old method of retrieving data locally 
     // var content = localStorage["contacts"]; 
     chrome.storage.sync.get('contacts', function(r) { 
      console.log("Contacts retrieved"); 
      var content = r["contacts"]; 
      textarea.value = content; 
     }); 
    }); 
+2

Кажется, что после того, как «выгрузка» была запущена, слишком поздно успешно выполнить операцию «sync.set». Рассматривали ли вы постепенное сохранение данных или экспериментировали с 'onbeforeunload'? (Я не уверен, что 'onbeforeunload' тоже будет работать.) – apsillers

+0

Использование' $ (window) .onbeforeunload() 'raises' Uncaught TypeError: Object [object Object] не имеет метода 'onbeforeunload''. – orschiro

+0

Помимо технической проблемы использования события выгрузки для сохранения данных, вы, вероятно, не хотите в любом случае подвергать риску данные пользователя, ожидающие эту часть срока службы страницы. Браузер может потерпеть крах, пользователь может столкнуться с сбоем питания, кто знает. Лучше спроектировать для сохранения сразу после создания/изменения данных. – sowbug

ответ

1

Я нашел решение. Вместо того чтобы использовать $(window).unload() я теперь использовать кнопку отправки, которую нужно щелкнуть перед закрытием popup.html:

$("#save-button").click(function() { 
     var textarea = document.querySelector("#contacts").value; 
     var save = {}; 
     save["contacts"] = textarea; 
     // Save data using the Chrome extension storage API. 
     chrome.storage.sync.set(save, function() { 
      console.log("Contacts saved"); 
     }); 
     $("#confirm").text("Contacts saved.").show().fadeOut(5000); 
}); 
4

От popup.js вы можете вызвать метод в background.js файла для сохранения данных:

popup.js:

addEventListener("unload", function(){ 
    var background = chrome.extension.getBackgroundPage(); 
    background.mySavefunction(data); 
} 

background.js:

function mySaveFunction(data){ 
    chrome.storage.sync.set(data, function(){ 
     console.log("Data saved."); 
    }); 
} 
Смежные вопросы