Range.deserializeSelection校验和错误?
问题描述:
这是一个后续问题this。我序列化了一个iframe中的文本选择并想恢复它,但它给了我一个错误,“未捕获错误:反序列化范围:序列化范围根节点(XXXXX)和目标根节点(XXXXX)的校验和不匹配”Range.deserializeSelection校验和错误?
var iframe = $("iframe")[0];
var selection = rangy.getSelection(iframe);
var serializeSelection = rangy.serializeSelection(selection);
alert(serializeSelection);
rangy.deserializeSelection(serializeSelection);
答
您需要提供window对象作为第三个参数:
rangy.deserializeSelection(serializeSelection, null, iframe.contentWindow);
演示:http://jsfiddle.net/2d6Bk/2/
这比应该更尴尬。版本1.3允许您使用iframe
而不是iframe.contentWindow
,但它仍然太难读,所以我会以某种方式改进它。
答
关于“未捕获错误:deserializeRange:串行化的范围根节点(XXXXX)和目标根节点(XXXXX)的校验和不匹配”错误:
瘦长序列化和反序列化应做相同的格式和键入文本。有时文本或格式或CSS可能会在反序列化时发生更改。所以你必须照顾你的文字。在您使用Iframe时,请在将文本加载到iframe后调用一次方法。我们所做的错误是我们在页面加载后序列化文本,并在反序列化的同时,我们尝试在iframe加载后反序列化文本。只需在开始反序列化之前检查您的iframe是否加载了内容。