我正在尝试将DOMRange(表示来自Cocoa WebView的用户选择)同步到当前在该视图中呈现的原始 HTML 源,作为一种 Dreamweaver-split-editor:
我的第一个想法是获取 DOMRange 对象startContainer
并offset
从那里向上走 DOM 树,将整体字符偏移量累积到 body 标签。
不幸的是,这个任务提出了一些问题:
- 显然,如果 DOM 是通过 Javascript 操作的,或者需要解析器清理格式错误的标签,那么文档的 outerHTML 将与原始 HTML 源不同。
- 我不知道如何在其父文本节点中获取节点的偏移量(例如,要定位的4 个字符
<p>some<div>target</div>text</p>
),并且规范化似乎并没有使这变得更容易。 - 试图解决 #1 中的一些问题,或者只是从 HTML 源转到 WebView 可能需要单独解析 HTML,然后关联两个 DOM 树。
一线希望是 HTML5 指定了一种标准的解析算法来处理无效的 HTML(WebKit 已经采用了),所以理论上应该可以使用现成的 HTML5 解析器来生成与 WebKit 相同的树——正确的?
这是我能找到的最相似的现有问题,但它的问题略有不同:
Getting source HTML from a WebView in Cocoa