Ошибка контрольной суммы Range.deserializeSelection?

Это дополнительный вопрос этого. Я сериализовал выделение текста в iframe и хочу восстановить его, но он выдает ошибку "Uncaught Error: deserializeRange: контрольные суммы корневого узла сериализованного диапазона (XXXXX) и целевого корневого узла (XXXXX) не совпадают"

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/

2 ответа

Решение

Вам необходимо предоставить объект окна в качестве третьего параметра:

rangy.deserializeSelection(serializeSelection, null, iframe.contentWindow);

Демо: http://jsfiddle.net/2d6Bk/2/

Это более неловко, чем должно быть. Версия 1.3 позволяет использовать iframe скорее, чем iframe.contentWindow, но это все еще слишком нечитабельно, так что я как-то улучшу это.

Относительно ошибки "Uncaught: deserializeRange: контрольные суммы корневого узла сериализованного диапазона (XXXXX) и целевого корневого узла (XXXXX) не совпадают":

Rangy сериализация и десериализация должны быть выполнены с тем же форматом и типом текста. Иногда текст или формат или CSS могут быть изменены при десериализации. Таким образом, вы должны заботиться о своем тексте. Как и при использовании Iframe, вызывайте методы один раз после загрузки текста в iframe. Ошибка, которую мы делаем, заключается в том, что мы сериализуем текст после загрузки страницы и, при десериализации, пытаемся десериализовать текст после загрузки iframe. Просто проверьте, загружен ли ваш iframe контентом или нет, прежде чем начать десериализацию.

Другие вопросы по тегам