我非常喜欢使用带有小脚本的书签。
例如,我在Reddit上编辑了this post的音符编辑脚本,以便通过localstorage自动保存并加载最后一个音符。
...
window.addEventListener("load", function () {
div.innerHTML = localStorage.getItem("note");
}, false);
document.body.addEventListener("keyup", debounce(function () {
localStorage.setItem("note", div.innerHTML);
}, 760));
...
如果我打开我的html文档作为存储在硬盘上的实际html文档,它运行正常。但是,当我使用粘贴在data: text/html, ...
的代码的(缩小版)版本中的URL栏运行它时,我收到NS_ERROR_NOT_AVAILABLE:
错误。这是有道理的,因为localstorage是域绑定的。
有没有办法让localstorage使用书签?
The full note code is available here,请注意,如果您将本地代码保存在硬盘驱动器上,则此代码将。因此,您可以为此添加书签并在需要时使用它。
答案 0 :(得分:4)
正如您在问题中描述的那样,localstorage属于Web原点。在您的浏览器中,书签数据:URI具有“null”原点。这意味着浏览器将data:page视为每次加载时从唯一的源提供。即使这样的起源可能有localStorage,也无法返回原点来访问那里的数据。
bookmarklet在当前页面的原点中运行脚本。这是一个使某些事情变得非常困难的问题。在另一个示例中,提供bookmarklet的密码管理器需要小心 - 它们在当前页面的安全沙箱中运行代码。代码中的一个小缺陷很容易将敏感键暴露给当前打开的页面。
如果您决定让书签指向数据:URI,则当前答案为否。
附录:除了获得域名之外,还有其他方式可以拥有其他来源。 Google Chrome中的扩展程序有自己的来源,它们可以完全从您的本地计算机运行。