是否有浏览器存储只能由创建它的页面使用?
我制作了一个TamperMonkey脚本来自动化我的工作。它是在打开特定域的页面时触发的。然后,它将在所述页面中找到特定链接(相同域)并在同一选项卡中打开它。如果新打开的页面与条件匹配,则它将返回上一页(手动检查)。如果它没有,那么它就会自行关闭。
我使用localStorage标记页面是否已尝试执行此检查。否则,脚本会在加载原始页面并重新陷入循环时重新打开链接。
只运行一个选项卡时,脚本运行顺畅。但是当我运行多个选项卡(全部在同一个域中)时,它经常会失败。我猜测每个标签可以访问相同的localStorage,从而搞乱循环检查。我还没有找到通过相同的脚本为每个标签的localStorage提供一个唯一的名称。
因此,我需要一个浏览器存储,即使它在同一个域中打开一个新网址后也可以被标签使用,但不能被另一个具有相同域名的标签使用。
答案 0 :(得分:7)
您可以将Window.sessionStorage用于此目的。
示例
// Store in `name` in the current tab
sessionStorage.setItem('name', 'Some Name');
// Get `name` from sessionStorage
var name = sessionStorage.getItem('name');
alert(name); // Some Name

根据MDN:
sessionStorage属性允许您访问当前源的会话存储对象。 sessionStorage类似于Window.localStorage,唯一的区别是当localStorage中存储的数据没有到期设置时,存储在sessionStorage中的数据在页面会话结束时被清除。只要浏览器处于打开状态,页面会话就会持续,并且会在页面重新加载和恢复后继续存在。 在新标签页或新窗口中打开页面会导致启动新会话,这与会话Cookie的工作方式不同。
<强> Source 强>