Я пытаюсь синхронизировать DOMRange (представляющий выбор пользователя из Cocoa WebView ) с исходным HTML-источником, отображаемым в данный момент в этом представлении, как своего рода Dreamweaver.-split-editor:
Моей первой идеей было получить startContainer
и offset
объекта DOMRange и оттуда пройти по дереву DOM, накапливая общее смещение символоввплоть до тега body.
К сожалению, эта задача создает некоторые проблемы:
- Очевидно, что externalHTML документа будет отличаться от исходного HTML-источника, если DOM манипулировал с помощью Javascript или необходим анализатордля очистки искаженных тегов.
- Я не могу понять, как получить смещение узла в его родительском текстовом узле (например, от 4 символов до target в
<p>some<div>target</div>text</p>
),и нормализация , кажется, не облегчает это. - Попытка объяснить некоторые проблемы в # 1 или просто перейти от исходного HTML-кода к WebView, вероятно, потребует sepпредварительный анализ HTML, а затем корреляция двух DOM-деревьев.
Один луч надежды состоит в том, что HTML5 определяет стандартный алгоритм синтаксического анализа для работы с недопустимым HTML (который WebKit с тех пор принял), поэтому в теориидолжна быть возможность использовать готовый анализатор HTML5 для генерации того же дерева, что и WebKit - верно?
Это наиболее похожий существующий вопрос, который я мог найти, но он касается немного другой проблемы:
Получение исходного HTML из WebView в Какао