[Сделано] Сохранение Local Storage

Поддержка
  • GPT по быстрому накидал функций:

    Сохранить:

    javascript
    function saveLocalStorageToFile() {
      // Get all keys from local storage
      const keys = Object.keys(localStorage);
      
      // Create an object to store key-value pairs
      const data = {};
      
      // Loop through each key and add its value to the object
      keys.forEach(key => {
        data[key] = localStorage.getItem(key);
      });
      
      // Convert the object to JSON string
      const jsonString = JSON.stringify(data);
      
      // Create a new blob with the JSON string as its content
      const blob = new Blob([jsonString], {type: 'application/json'});
      
      // Create a link element to download the file
      const url = URL.createObjectURL(blob);
      const link = document.createElement('a');
      link.href = url;
      link.download = 'local-storage.json';
      
      // Click the link to start the download
      document.body.appendChild(link);
      link.click();
      
      // Clean up by removing the link and revoking the URL object
      document.body.removeChild(link);
      URL.revokeObjectURL(url);
    }
    
    // Call the function to save local storage to a file
    saveLocalStorageToFile();
    

    Загрузить

    function loadLocalStorageFromFile(file) {
      // Create a new FileReader object
      const reader = new FileReader();
      
      // Set a callback function for when the file is loaded
      reader.onload = () => {
        try {
          // Parse the JSON string into an object
          const data = JSON.parse(reader.result);
          
          // Loop through each key-value pair and add it to local storage
          Object.keys(data).forEach(key => {
            localStorage.setItem(key, data[key]);
          });
          
          // Display a success message
          console.log('Local storage has been updated.');
        } catch (error) {
          console.error(error);
        }
      };
      
      // Read the file as text
      reader.readAsText(file);
    }
    
    // Usage example: Load a file when the user selects it using an input element
    const inputElement = document.createElement('input');
    inputElement.type = 'file';
    inputElement.addEventListener('change', event => {
      const file = event.target.files[0];
      loadLocalStorageFromFile(file);
    });
    document.body.appendChild(inputElement);
    

    Надо будет в модуль завернуть ...

  • @DuckDuck said in [Сделано] Сохранение Local Storage:

    @Fox Думая речь не о том что локал сторадж не сохраняется сейчас в профиль - а в том что часто вообще целесообразно не использовать постоянный профиль. А для этого очень было бы удобно иметь готовые кнопки - сохранить локал сторадж/загрузить локал сторадж, так же как есть возможность работы с куками. Надеюсь понятно объяснил ?

    Это же обычный объект, сохраните его любым удобным способом в переменную, а затем загрузите

  • @DuckDuck На сколько знаю, все эти костыли загрузят все данные для текущего домена на котором открыта вкладка, а не в базу браузера.
    И тут или открывать сначала без данных сайт, и палиться.
    Или костыль ввиде блокировки нужного сайта потом переход на него и загрузка данных, и разблокировка.
    А если таких сайтов сотни, то беда.

    По этому нужно нормальное встроенное решение от BAS.

  • @DuckDuck said in [Сделано] Сохранение Local Storage:

    GPT по быстрому накидал функций:
    Надо будет в модуль завернуть ...

    Вы точно знаете, что делает этот код?

  • @biohacker01 said in [Сделано] Сохранение Local Storage:

    @DuckDuck На сколько знаю, все эти костыли загрузят все данные для текущего домена на котором открыта вкладка, а не в базу браузера.
    И тут или открывать сначала без данных сайт, и палиться.
    Или костыль ввиде блокировки нужного сайта потом переход на него и загрузка данных, и разблокировка.
    А если таких сайтов сотни, то беда.

    По этому нужно нормальное встроенное решение от BAS.

    Вы всегда можете просто скопировать папку "Local Storage" из одного профиля в другой

  • @Fox said in [Сделано] Сохранение Local Storage:

    Вы всегда можете просто скопировать папку "Local Storage" из одного профиля в другой

    так раньше и делал, но это может не работать. надо проверять - у гугла бывают зашифрованные хранилища, щас не помню относится ли к ним локал сторадж. И тогда это не сработает. Так как ключ шифрования у каждого профиля будет свой. Нодо проверить.

    К тому же такой способ не удобен для хранения в базе например.

    По поводу кода выше - там каждая строка закомментирована - школьник разберется.

    Критикуешь - предлагай - напиши изящнее :)

  • Вообщем если возможно реализуйте/верните этот функционал, многим он будет полезен.
    И если возможно то и ответ, будет делаться или забраковано на всегда идея.

  • @Fox said in [Сделано] Сохранение Local Storage:

    Это же обычный объект, сохраните его любым удобным способом в переменную, а затем загрузите

    Ну да так проще:

    Сохранить

    [[LOCALSTORAGE]]=JSON.stringify(localStorage);
    

    Загрузить:

    localStorage.clear();
    var data = JSON.parse([[LOCALSTORAGE]]);
    Object.keys(data).forEach(function (k) {
      localStorage.setItem(k, JSON.stringify(data[k]));
    });
    

    Но только для одного сайта, и только с блокировкой сначала этого сайта, как справедливо заметил @biohacker01

  • @biohacker01 хотя Фокс прав проще папку сохранять и на нее ссылку делать
    Default\Local Storage\leveldb

    Посмотрел данные в открытом виде лежат в файле с расширением log

  • @biohacker01 said in [Сделано] Сохранение Local Storage:

    @Fox что бы было сохранить/загрузить Local Storage
    или хотя бы как раньше через сохранить куки

    Сохранить(частично)/очистить(все) данные можно через CDP, а вот сделать импорт уже сложнее, так как готового API у CDP нет. А браузер из BAS работает, в том числе используя именно CDP.

    Так как разработчик BAS использует свой же пропатченный браузер, то, я думаю у него есть техническая возможность сделать свой приватный API для экспорта/импорта любых данных, другое дело - будет ли он это делать. Думаю, что не будет.

    Вероятно, самое просто решение делать импорт/экспорт данных на уровне файловой системы из профиля браузера. Для некоторых данных нужно будет, чтобы профиль не был открыт.

    Ссылки по теме:

    P.S.
    Нужен метод Storage.setDataForOrigin, которого у CDP пока нет.

  • Археолог 😆

  • @FastSpace said in [Сделано] Сохранение Local Storage:

    Археолог 😆

    Годы идут, но как в BAS не было решения из коробки, таки нет.

  • Апну. Все еще пользуемся костылями, которые не решают проблему хранения всего ЛС.