2

我正在尝试将DOMRange(表示来自Cocoa WebView的用户选择)同步到当前在该视图中呈现的原始 HTML 源,作为一种 Dreamweaver-split-editor:

Dreamweaver 代码设计拆分视图

我的第一个想法是获取 DOMRange 对象startContaineroffset从那里向上走 DOM 树,将整体字符偏移量累积到 body 标签。

不幸的是,这个任务提出了一些问题:

  1. 显然,如果 DOM 是通过 Javascript 操作的,或者需要解析器清理格式错误的标签,那么文档的 outerHTML 将与原始 HTML 源不同。
  2. 我不知道如何在其父文本节点中获取节点的偏移量(例如,要定位的4 个字符<p>some<div>target</div>text</p>),并且规范化似乎并没有使这变得更容易。
  3. 试图解决 #1 中的一些问题,或者只是从 HTML 源转到 WebView 可能需要单独解析 HTML,然后关联两个 DOM 树。

一线希望是 HTML5 指定了一种标准的解析算法来处理无效的 HTML(WebKit 已经采用了),所以理论上应该可以使用现成的 HTML5 解析器来生成与 WebKit 相同的树——正确的?

这是我能找到的最相似的现有问题,但它的问题略有不同:
Getting source HTML from a WebView in Cocoa

4

1 回答 1

0

您的问题#1实际上还不错;你可以关闭 JS 解释。

查看QWebSettings::JavascriptEnabled,或者在加载任何 html 之前将其放入: QWebSettings::globalSettings()->setAttribute(QWebSettings::JavascriptEnabled, false);

这应该让你的 DOM 不受 JS 的破坏。祝你好运!

于 2011-03-25T00:33:55.503 回答