При работе с WKWebView для iOS WebKit я обнаружил ошибку, когда попытался вернуть postMessage на свой WKScriptMessageHandler с помощью кода вроде
window.webkit.messageHandlers.thisHandler.postMessage(message);
где message - это объект Javascript (или, в глазах разработчика iOS, словарь), а ошибка:
WKJavaScriptExceptionMessage=DataCloneError: The object can not be cloned.
Было довольно непонятно, о чем идет речь, и я не мог найти в Google никакой полезной информации.





После удаления одного за другим ключей и значений из моего объекта сообщения я в конце концов понял, что эта ошибка вызвана тем, что я по ошибке включил в объект некоторые объекты DOM Javascript вместо их примитивных значений. Например, я включил некоторую переменную
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);
У меня была такая же ошибка из-за функции в полезной нагрузке сообщения.