iOS WebKit - DataCloneError: The object can not be cloned

iOS WebKit - DataCloneError: The object can not be cloned

在使用 iOS WebKit 的 WKWebView 时,我在尝试 postMessage 返回我的 WKScriptMessageHandler 时遇到错误,代码如下

window.webkit.messageHandlers.thisHandler.postMessage(message);

其中 message 是一个 Javascript 对象(或者在 iOS 开发者眼中,是一个字典)并且错误是:

WKJavaScriptExceptionMessage=DataCloneError: The object can not be cloned.

我很困惑这是关于什么的,我无法 google 找出任何有用的信息。

从我的消息对象中一个一个地删除键值后,我最终发现这个错误是由于我错误地包含了一些 Javascript DOM 对象而不是它们的原始值目的。例如,我包含了一些变量

const myVar = document.body.querySelector("div.someClassName")

在我的邮件正文中,无法为本机 Swift 环境克隆。同样,window.location 是一个纯 JS DOM 对象,也不可克隆。要修复,只需获取它们的原始值并将其包含在消息中,例如

const myVar = document.body.querySelector("div.someClassName").innerText;
const myURL = window.location.href;
const message = {myVar, myURL};
window.webkit.messageHandlers.thisHandler.postMessage(message);

我在消息负载中有一个函数时遇到了同样的错误。