Mic*_*way 6 javascript local-storage
我试图用 localStorage 作弊。该规范定义了当 localStorage 中的值发生变化时,同一域上的所有其他打开的页面都会收到一个存储事件回调。我还希望在更改值的页面上触发该事件。
我向每个页面添加了一个隐藏的 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');
});
}
Run Code Online (Sandbox Code Playgroud)
loadSetter存储成功,所有窗口都接收到存储事件。当我单击播放音频时,我在回调中收到以下错误 - Uncaught DOMException: Failed to execute 'setItem' on 'Storage': access is denied for this document。
我能做些什么来解决这个问题吗?我真的不想写代码来单独更新当前页面
更新:我不知道我在上面给出的例子中是否做错了什么,但代码似乎在一些回调中工作。我在页面上有一个带有单击事件的锚点,我可以在其中通过 iFrame 设置 localStorage
您可以尝试postMessage API来启用您的页面和 iFrame 之间的通信。简而言之,发送一条消息以指示 iFrame 更新其 localStorage,并发送另一条消息以要求 iFrame 在您需要发送的数据时返回其 localStorage 内容。
小心,因为:
| 归档时间: |
|
| 查看次数: |
14349 次 |
| 最近记录: |