Как установить изображение пользователя в качестве фона для расширения Chrome

Итак, эта опция должна позволить пользователю загружать файл (изображение) с <input id = "background-image" type=file></input> (это работает), но как мне сохранить фоновое изображение, когда пользователь открывает новую вкладку или закрывает текущую вкладку.

Вот JS, который устанавливает фоновое изображение:

document.getElementById('background-image').addEventListener('change', readURL, true);
function readURL(){
   var file = document.getElementById("background-image").files[0];
   var reader = new FileReader();
   var readFile = reader.readAsDataURL(file);
   reader.onloadend = function(){
     document.getElementById("main-background-image").style.backgroundImage = "url(" + reader.result + ")";        
   }

   if (file){
      reader.readAsDataURL(file);
    }else{
    }
} 

Опять же, это устанавливает изображение для текущей вкладки, если пользователь не щелкает мышью. Можно ли сохранить фоновое изображение пользователя для будущих и других вкладок?

Просто сохраните reader.result в chrome.storage.local (асинхронный) или localStorage (синхронный).

wOxxOm 07.06.2018 15:09

Извините за вопрос, но я не уверен, где бы я назначил reader.results в операторе if или где-то еще? Чтобы назначить reader.result, это должно быть что-то вроде `localStorage [" background-image "] = reader.result;`.

Dimitriy Kruglikov 07.06.2018 15:28
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
150
1

Ответы 1

Мое решение было основано на другом вопросе о переполнении стека: Сохранение загруженного изображения в localStorage (расширение chrome)

var input = document.getElementById('getval');
    input.onchange = function(evt){
        var tgt = evt.target || window.event.srcElement, 
            files = tgt.files;

        if (FileReader && files && files.length) {
            var fr = new FileReader();
            fr.onload = function () {
                localStorage['foo'] = fr.result;
            }
            fr.readAsDataURL(files[0]);
        }
    }

после того, как я вставил этот бит кода:

window.onload=function(){
var el = document.querySelector('body');
el.style.backgroundImage = 'url(' + localStorage['foo'] + ')';

Другие вопросы по теме