Определить индекс символа в исходном коде HTML, используя DOMRange из выбора WebKit - PullRequest
2 голосов
/ 09 февраля 2011

Я пытаюсь синхронизировать DOMRange (представляющий выбор пользователя из Cocoa WebView ) с исходным HTML-источником, отображаемым в данный момент в этом представлении, как своего рода Dreamweaver.-split-editor:

Dreamweaver code-design splitview

Моей первой идеей было получить startContainer и offset объекта DOMRange и оттуда пройти по дереву DOM, накапливая общее смещение символоввплоть до тега body.

К сожалению, эта задача создает некоторые проблемы:

  1. Очевидно, что externalHTML документа будет отличаться от исходного HTML-источника, если DOM манипулировал с помощью Javascript или необходим анализатордля очистки искаженных тегов.
  2. Я не могу понять, как получить смещение узла в его родительском текстовом узле (например, от 4 символов до target в <p>some<div>target</div>text</p>),и нормализация , кажется, не облегчает это.
  3. Попытка объяснить некоторые проблемы в # 1 или просто перейти от исходного HTML-кода к WebView, вероятно, потребует sepпредварительный анализ HTML, а затем корреляция двух DOM-деревьев.

Один луч надежды состоит в том, что HTML5 определяет стандартный алгоритм синтаксического анализа для работы с недопустимым HTML (который WebKit с тех пор принял), поэтому в теориидолжна быть возможность использовать готовый анализатор HTML5 для генерации того же дерева, что и WebKit - верно?

Это наиболее похожий существующий вопрос, который я мог найти, но он касается немного другой проблемы:
Получение исходного HTML из WebView в Какао

1 Ответ

0 голосов
/ 25 марта 2011

Ваша проблема № 1 на самом деле не так уж и плоха; Вы можете просто отключить интерпретацию JS.

Посмотрите на QWebSettings::JavascriptEnabled или просто добавьте это перед загрузкой любого html: QWebSettings::globalSettings()->setAttribute(QWebSettings::JavascriptEnabled, false);

Это должно оставить вашу DOM незащищенной JS. Удачи!

...