Ошибка контрольной суммы 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);
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 контентом или нет, прежде чем начать десериализацию.