2

DOMRange ( Cocoa WebViewからのユーザー選択を表す) を、一種の Dreamweaver-split-editor として、そのビューで現在レンダリングされている元の HTML ソースに同期しようとしています。

Dreamweaver コード設計分割ビュー

私の最初のアイデアは、DOMRange オブジェクトを取得し、startContainerそこoffsetから DOM ツリーをたどり、body タグまでの全体的な文字オフセットを蓄積することでした。

残念ながら、このタスクにはいくつかの問題があります。

  1. DOM が Javascript を介して操作された場合、または不正な形式のタグをクリーンアップするためにパーサーが必要な場合、ドキュメントの outerHTML は元の HTML ソースとは明らかに異なります。
  2. 親テキスト ノード内のノードのオフセットを取得する方法がわかりません (たとえば、ターゲットに4 文字<p>some<div>target</div>text</p>)。正規化してもこれは簡単にはなりません。
  3. #1 の問題のいくつかを説明しようとする、または単に HTML ソースから WebView に移行するには、おそらく HTML を個別に解析してから 2 つの DOM ツリーを関連付ける必要があります。

希望の光の 1 つは、HTML5 が無効な HTML を処理するための標準的な解析アルゴリズムを指定していることです (WebKit はその後採用しました)。したがって、理論的には、市販の HTML5 パーサーを使用して WebKit と同じツリーを生成できるはずです —右?

これは私が見つけることができる最も類似した既存の質問ですが、少し異なる問題に対するものです:
Cocoa の WebView からソース HTML を取得する

4

1 に答える 1

0

あなたの問題#1は実際にはそれほど悪くはありません。JS 解釈をオフにするだけです。

を参照するか、 htmlQWebSettings::JavascriptEnabledをロードする前にこれをドロップします。 QWebSettings::globalSettings()->setAttribute(QWebSettings::JavascriptEnabled, false);

これにより、DOM が JS によって破壊されないままになるはずです。幸運を!

于 2011-03-25T00:33:55.503 に答える