gpt4 book ai didi

javascript - 在事件回调中访问 iFrame 的 localStorage?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:55:38 25 4
gpt4 key购买 nike

我想用 localStorage 作弊。该规范定义当 localStorage 中的值发生变化时,同一域中所有其他打开的页面都会收到一个 storage 事件回调。我还希望该事件在值已更改的页面上触发。

我向每个页面添加了一个隐藏的 iFrame,它从同一域加载一个空文档,并尝试将其用作 localStorage 更改的目标(因此从技术上讲,我正在查看的页面不是 localStorage 的来源改变)

它工作正常,除了当我在事件回调中做同样的事情时......

function fnSetupMusicPlayerSection(i, oSection) {
var oAudio, oLocalStorageFrame, oLocalStorageWindow;

oAudio = oSection.querySelector('audio');
oLocalStorageFrame = oSection.querySelector('iframe.local-storage-target');
oLocalStorageWindow = oLocalStorageFrame.contentWindow || oLocalStorageFrame;

oLocalStorageWindow.localStorage.setItem('loadSetter', '1111');

oAudio.addEventListener('play', function(oEvent) {
oLocalStorageWindow.localStorage.setItem('callbackSetter', '2222');
});
}

loadSetter 已成功存储,所有窗口都收到 storage 事件。当我点击播放音频时,回调中出现以下错误 - Uncaught DOMException: Failed to execute 'setItem on 'Storage': access is denied for this document.

有什么办法可以解决这个问题吗?我真的不想写代码单独更新当前页面

更新:我不知道我在上面给出的示例中是否做错了,但代码似乎在某些 回调中工作。我在页面上有一个带有点击事件的 anchor ,我可以通过 iFrame 设置 localStorage

最佳答案

你可以试试postMessage API启用您的页面和 iFrame 之间的通信。简而言之,发送一条消息指示 iFrame 更新其 localStorage,并在您需要发送的数据时发送另一条消息要求 iFrame 返回其 localStorage 内容。

小心因为:

  • 这是一个 HTML5 API。检查您应用的最低要求是否允许实现。
  • 这是一种跨源通信,这意味着如果您浏览器中的其他页面使用 postMessage,您的 iFrame 也会收到它。您可能需要将信息添加到消息中以通知 iFrame 它应该读取哪条消息。

关于javascript - 在事件回调中访问 iFrame 的 localStorage?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44584126/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com