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);
我在消息负载中有一个函数时遇到了同样的错误。
在使用 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);
我在消息负载中有一个函数时遇到了同样的错误。