Created
March 6, 2024 18:51
-
-
Save panzi/9be026f8ee5a727b633bfcf056b565ec to your computer and use it in GitHub Desktop.
Bookmarklets to export/import localStorage. Import does *not* clean localStorage, only sets the loaded values.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// bookmarklet: | |
// javascript:(function()%7Bconst%20blob%3Dnew%20Blob(%5BJSON.stringify(localStorage)%5D%2C%7Btype%3A'application%2Fjson'%7D)%3Bconst%20link%3Ddocument.createElement('a')%3Bconst%20url%3DURL.createObjectURL(blob)%3Blink.href%3Durl%3Blink.download%3D'local_storage.json'%3Blink.style.display%3D'none'%3Bdocument.body.appendChild(link)%3Blink.click()%3BsetTimeout(()%3D%3E%7BURL.revokeObjectURL(url)%3Bdocument.body.removeChild(link)%3B%7D%2C250)%3B%7D)()%3B | |
function exportLocalStorage(){ | |
const blob = new Blob([JSON.stringify(localStorage)],{type:'application/json'}); | |
const link = document.createElement('a'); | |
const url = URL.createObjectURL(blob); | |
link.href = url; | |
link.download = 'local_storage.json'; | |
link.style.display='none'; | |
document.body.appendChild(link); | |
link.click(); | |
setTimeout(() => { | |
URL.revokeObjectURL(url); | |
document.body.removeChild(link); | |
}, 250); | |
} | |
// bookmarklet: | |
// javascript:(function()%7Bconst%20input%3Ddocument.createElement('input')%3Binput.type%3D'file'%3Binput.onchange%3Dasync()%3D%3E%7Btry%7Bif(input.files.length%3E0)%7Bconst%20text%3Dawait%20input.files%5B0%5D.text()%3Bconst%20data%3DJSON.parse(text)%3Bif(!data%7C%7Ctypeof%20data!%3D%3D'object')%7Bthrow%20new%20TypeError('Not%20a%20valid%20local%20storage%20file!')%3B%7Dfor(const%20key%20in%20data)%7BlocalStorage.setItem(key%2Cdata%5Bkey%5D)%3B%7Dalert('Imported%20Local%20Storage!')%3B%7D%7Dcatch(error)%7Balert(error.message)%3Bconsole.error(error)%3B%7Ddocument.body.removeChild(input)%3B%7D%3Binput.style.display%3D'none'%3Bdocument.body.appendChild(input)%3Binput.click()%3B%7D)()%3B | |
function importLocalStorage(){ | |
const input = document.createElement('input'); | |
input.type = 'file'; | |
input.onchange = async () => { | |
try { | |
if (input.files.length > 0) { | |
const text = await input.files[0].text(); | |
const data = JSON.parse(text); | |
if (!data || typeof data !== 'object') { | |
throw new TypeError('Not a valid local storage file!'); | |
} | |
for (const key in data) { | |
localStorage.setItem(key, data[key]); | |
} | |
alert('Imported Local Storage!'); | |
} | |
} catch (error) { | |
alert(error.message); | |
console.error(error); | |
} | |
document.body.removeChild(input); | |
}; | |
input.style.display='none'; | |
document.body.appendChild(input); | |
input.click(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment