iOS WebKit - DataCloneError:无法克隆对象

时间:2018-06-17 16:46:26

标签: ios webkit wkwebview

使用iOS WebKit的WKWebView时,我在{/ 1>}代码中尝试postMessage回到我的WKScriptMessageHandler时遇到错误

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

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

WKJavaScriptExceptionMessage=DataCloneError: The object can not be cloned.

这是令人困惑的,我无法谷歌任何有用的信息。

2 个答案:

答案 0 :(得分:3)

从我的消息对象中逐个删除键值后,我最终发现这个错误是由于我错误地包含了一些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);

答案 1 :(得分:0)

在消息有效负载中具有功能时,我也遇到了同样的错误。

相关问题