使用iOS WebKit的WKWebView时,我在{/ 1>}代码中尝试postMessage
回到我的WKScriptMessageHandler
时遇到错误
window.webkit.messageHandlers.thisHandler.postMessage(message);
其中message是一个Javascript对象(或者在iOS开发人员的眼中,一本字典),错误是:
WKJavaScriptExceptionMessage=DataCloneError: The object can not be cloned.
这是令人困惑的,我无法谷歌任何有用的信息。
答案 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)
在消息有效负载中具有功能时,我也遇到了同样的错误。