【发布时间】:2015-02-17 22:30:38
【问题描述】:
使用给定函数发布消息,但收到错误“DataCloneError:无法克隆对象。”在 "target['postMessage'](message, target_url.replace( /([^:]+://[^/]+).*/, '$1')) 行处在 FireFox-34 中,相同的代码在 Chrome 和旧版本的 FireFox 上运行良好。
var storage = function() {
return {
postMessage : function(message, target_url, target) {
if (!target_url) {
return;
}
var target = target || parent; // default to parent
if (target['postMessage']) {
// the browser supports window.postMessage, so call it with a targetOrigin
// set appropriately, based on the target_url parameter.
target['postMessage'](message, target_url.replace( /([^:]+:\/\/[^\/]+).*/, '$1'));
}
}
}
}();
【问题讨论】:
-
发生错误时尝试发布的“消息”类型是什么?可能是 Blob 还是文件?
-
如果传递的
message变量包含诸如DocumentFragment对象的DOM 节点对象,您需要在发送前使用XMLSerializer.prototype.serializeToString方法将其转换为字符串。您可以使用DOMParser对象或Element.prototype.innerHTML、Element.prototype.insertAdjacentHTML或Element.prototype.outerHTML方法来反序列化另一端的对象。
标签: javascript local-storage mozilla postmessage