浏览器标签存储?



是否有浏览器存储只能由创建它的页面使用?

我正在制作一个TamperMonkey脚本来自动化我的工作。当打开来自特定域的页面时,将触发它。然后,它将在所述页面中找到特定链接(同一域),并在同一选项卡中打开它。如果新打开的页面符合条件,它将返回到上一页(手动检查)。如果没有,那么它将自行关闭。

我使用 localStorage 来标记页面是否尝试执行此检查。否则,脚本将在加载原始页面并陷入循环时重新打开链接。

当只有一个选项卡运行时,脚本可以平稳运行。但是当我运行多个选项卡(都在同一个域中)时,它经常失败。我猜每个选项卡都可以访问相同的 localStorage,从而弄乱循环检查。无论如何,我还没有找到通过相同的脚本为每个选项卡的 localStorage 提供一个唯一的名称。

因此,我需要一个浏览器存储,即使选项卡在同一域中打开了新 url,也可以使用它,但不能由具有相同域的另一个选项卡使用。

您可以使用 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 的工作方式不同。

最新更新