Utilisation de localstorage dans les favoris

J'aime beaucoup utiliser des signets avec de petits scripts.

Par exemple, j'ai édité le script d'édition de note de cette publication sur Reddit pour enregistrer automatiquement et charger la dernière note via localstorage.

... window.addEventListener("load", function () { div.innerHTML = localStorage.getItem("note"); }, false); document.body.addEventListener("keyup", debounce(function () { localStorage.setItem("note", div.innerHTML); }, 760)); ... 

Il fonctionne bien si j'ouvre mon document html en tant que document html réel stocké sur mon disque dur. Mais quand je l'exécute en utilisant la barre d'URL en collant dans la version (minifiée) de mon code avec les data: text/html, ... , j'ai une NS_ERROR_NOT_AVAILABLE: erreur. Cela est logique, puisque localstorage est lié au domaine.

Existe-t-il un moyen de faire fonctionner localstorage avec des signets?

Le code de la note complète est disponible ici , notez que ce code fonctionnera si vous l'enregistrez localement sur votre disque dur. Donc, vous pouvez créer un signet et l'utiliser si vous le souhaitez.

Comme vous le décrivez dans la question, localstorage appartient à une origine Web. Dans votre navigateur, les données marquées par les signets: les URI ont une origine "nulle". Cela signifie que le navigateur traite les données: la page est servie à partir d'une origine unique à chaque chargement. Même si une telle origine pourrait avoir un stockage local, il n'y aurait aucun moyen de revenir à l'origine pour accéder aux données là-bas.

Un bookmarklet exécute un script à l'origine de la page actuelle. C'est un problème qui a rendu certaines choses, comme votre tâche, très difficiles. Dans un autre exemple, les gestionnaires de mot de passe qui fournissent un bookmarklet doivent faire attention – ils utilisent du code dans le sandbox de sécurité de la page actuelle. Il est facile pour un défaut mineur dans leur code d'exposer les clés sensibles à la page actuellement ouverte.

Si vous êtes déterminé à faire afficher le signet sur une donnée: URI, la réponse actuelle est non.

Addendum: Il existe d'autres façons d'avoir une origine autrement qu'en obtenant un domaine. Les extensions de Google Chrome ont leur propre origine, et elles peuvent fonctionner entièrement à partir de votre ordinateur local.