javascript 未捕获的DOMException:无法在“Window”上执行“postMessage”:无法克隆对象

ttygqcqt  于 2023-08-02  发布在  Java
关注(0)|答案(2)|浏览(268)

我在打电话

parent.postMessage(obj, 'whatever');

字符串
在一个iframe中,我得到了这个错误:第一个月

wribegjk

wribegjk1#

原来我传递的对象有方法,这就是为什么错误消息说An object could not be cloned
要解决此问题,您可以执行以下操作:

obj = JSON.parse(JSON.stringify(obj));
parent.postMessage(obj, 'whatever');

字符串

ih99xse1

ih99xse12#

根据您试图传递的数据,一种更简单的方法可能是使用与postMessage()兼容的更简单的数据结构。
下面的代码将抛出错误,因为postMessage无法序列化SetIterator

let s = new Set();
parent.postMessage({s: s.values()}, '*');

字符串
以下代码将按预期工作,因为postMessage可以序列化Array

let s = new Set();
parent.postMessage({s: [...s]}, '*');


这种方法更符合postMessage()的隐式序列化意图。当您需要更复杂的数据结构或不想进行所有的外科手术时,好的ole JSON.stringify/parse hammer可以很好地工作;)

相关问题