我在打电话
parent.postMessage(obj, 'whatever');
字符串在一个iframe中,我得到了这个错误:第一个月
wribegjk1#
原来我传递的对象有方法,这就是为什么错误消息说An object could not be cloned。要解决此问题,您可以执行以下操作:
An object could not be cloned
obj = JSON.parse(JSON.stringify(obj)); parent.postMessage(obj, 'whatever');
字符串
ih99xse12#
根据您试图传递的数据,一种更简单的方法可能是使用与postMessage()兼容的更简单的数据结构。下面的代码将抛出错误,因为postMessage无法序列化SetIterator:
postMessage()
postMessage
SetIterator
let s = new Set(); parent.postMessage({s: s.values()}, '*');
字符串以下代码将按预期工作,因为postMessage可以序列化Array:
Array
let s = new Set(); parent.postMessage({s: [...s]}, '*');
型这种方法更符合postMessage()的隐式序列化意图。当您需要更复杂的数据结构或不想进行所有的外科手术时,好的ole JSON.stringify/parse hammer可以很好地工作;)
JSON.stringify/parse
2条答案
按热度按时间wribegjk1#
原来我传递的对象有方法,这就是为什么错误消息说
An object could not be cloned
。要解决此问题,您可以执行以下操作:
字符串
ih99xse12#
根据您试图传递的数据,一种更简单的方法可能是使用与
postMessage()
兼容的更简单的数据结构。下面的代码将抛出错误,因为
postMessage
无法序列化SetIterator
:字符串
以下代码将按预期工作,因为
postMessage
可以序列化Array
:型
这种方法更符合
postMessage()
的隐式序列化意图。当您需要更复杂的数据结构或不想进行所有的外科手术时,好的oleJSON.stringify/parse
hammer可以很好地工作;)