我正在尝试进行呼叫
parent.postMessage(obj, 'whatever');
我在iframe内部并且收到了这个错误:Uncaught DOMException: Failed to execute 'postMessage' on 'Window': An object could not be cloned.
我正在尝试进行呼叫
parent.postMessage(obj, 'whatever');
我在iframe内部并且收到了这个错误:Uncaught DOMException: Failed to execute 'postMessage' on 'Window': An object could not be cloned.
原来我传递的对象有方法,这就是为什么错误消息会说“无法克隆对象”。
要解决这个问题,你可以执行以下操作:
obj = JSON.parse(JSON.stringify(obj));
parent.postMessage(obj, 'whatever');
postMessage()
兼容的简单数据结构。postMessage
无法序列化SetIterator
,因此以下代码将引发错误。let s = new Set();
parent.postMessage({s: s.values()}, '*');
postMessage
可以序列化Array
:let s = new Set();
parent.postMessage({s: [...s]}, '*');
postMessage()
的隐式序列化的意图。当您需要更复杂的数据结构或者不想过于费力地进行操作时,老牌的JSON.stringify/parse
函数就能很好地胜任 ;)
window.postMessage
使用此算法。有关更多信息,请参见我的**答案,其中包含解决方案和详细说明为什么会发生这种情况**。 - Bharata