实际上chromium是没有实现阅读模式的,但是阅读模式确实是移动浏览器比较实用的一个功能,特别对于喜欢在线浏览小说的人来说,一个良好的阅读模式可以提供极佳的阅读体验。所以实现阅读模式是非常必要的,但是想实现一个良好的阅读模式还算难度较大的。
其实实现方式是很容易理解的,就是玩弄当前的DOM树,一番折腾之后得出三个字符串:一是标题,二是内容,三是下一页或者上一页的URL。然后把这三个字符串交给browser去按照你想要的方式来显示。但是直接操作当前的DOM树肯定是不合适的,那么可以用document->body()->cloneElementWithChildren(true)来复制body节点及其子树。在什么位置进行操作呢?WebViewImpl类是比较合适的,既能方便的操作webcore中的对象又能容易与renderviewimpl联系。
那么实现的难点就是如何制定规则来得到我们想要的字符串。有的规则是很显而易见的,比如去除肯定无用的节点:
1. 所有script节点
2. 所有display:none或者visibility:hidden的节点
3. 不包含实际内容或者内容没有什么意义的节点,比如一些表单节点,img节点等,如果你认为不适合作为阅读模式的呈现对象(阅读模式明显是为了展现大段文字),都可以统统去掉。
还有非常多的规则不太容易制定,