DOMRange ( Cocoa WebViewからのユーザー選択を表す) を、一種の Dreamweaver-split-editor として、そのビューで現在レンダリングされている元の HTML ソースに同期しようとしています。
私の最初のアイデアは、DOMRange オブジェクトを取得し、startContainer
そこoffset
から DOM ツリーをたどり、body タグまでの全体的な文字オフセットを蓄積することでした。
残念ながら、このタスクにはいくつかの問題があります。
- DOM が Javascript を介して操作された場合、または不正な形式のタグをクリーンアップするためにパーサーが必要な場合、ドキュメントの outerHTML は元の HTML ソースとは明らかに異なります。
- 親テキスト ノード内のノードのオフセットを取得する方法がわかりません (たとえば、ターゲットに4 文字
<p>some<div>target</div>text</p>
)。正規化してもこれは簡単にはなりません。 - #1 の問題のいくつかを説明しようとする、または単に HTML ソースから WebView に移行するには、おそらく HTML を個別に解析してから 2 つの DOM ツリーを関連付ける必要があります。
希望の光の 1 つは、HTML5 が無効な HTML を処理するための標準的な解析アルゴリズムを指定していることです (WebKit はその後採用しました)。したがって、理論的には、市販の HTML5 パーサーを使用して WebKit と同じツリーを生成できるはずです —右?
これは私が見つけることができる最も類似した既存の質問ですが、少し異なる問題に対するものです:
Cocoa の WebView からソース HTML を取得する