Range.deserializeSelection校验和错误?

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); 

演示:http://jsfiddle.net/codef0rmer/2d6Bk/1/

您需要提供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是否加载了内容。