在给定来自WebKit选择的DOMRange的情况下,确定HTML源中的字符索引

时间:2011-02-08 21:50:58

标签: cocoa dom webkit html-parsing html-editor

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

Dreamweaver code-design splitview

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

不幸的是,这项任务存在一些问题:

  1. 显然,如果通过Javascript操作DOM或清理格式错误的标记所需的解析器,文档的outerHTML将与原始HTML源不同。
  2. 我无法弄清楚如何在其父文本节点中获取节点的偏移量(例如,<p>some<div>target</div>text</p>中的 target 的4个字符)和normalize似乎没有让这更容易。
  3. 尝试解决#1中的一些问题,或者只是从HTML源代码到WebView可能需要单独解析HTML然后关联两个DOM树。
  4. 一线希望是HTML5指定了一个标准的解析算法来处理无效的HTML(WebKit已经采用了它),所以理论上应该可以使用现成的HTML5解析器来生成相同的树。作为WebKit - 对吧?

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

1 个答案:

答案 0 :(得分:0)

你的问题#1实际上并不是那么糟糕;你可以关闭JS解释。

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

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