eww 如何在获取html后进行html修改再rendering

大家一直在追求一个广义的更友好的render, 我更想直接在获取html之后做一个依据不同网站的render, 反正我只经常浏览那么几个网站,(或者建立一个社区库,大家一起优化) 我搜不到这么一个filter,(听说w3m有),但是我想用eww。

我找了半天找不到这么一个function 或者 advice的入口。 前提可以知道,我现在获得的url和content, 然后我直接删掉我不要的那些区域。再扔给render。

btw,我没搜到eww怎么登录这个网站。。

在浏览器里写扩展插件好像也做不到这点,只能在render渲染后对网站内容进行修改,要在render之前改,也许可以对你要浏览的那么几个网站做代理,在你的代理程序里面针对具体网站改,然后访问你的代理地址就得到修改后的结果。 这和eww没关系了

eww 有个变量 eww-retrieve-command,可以用 curl 获取网页内容,应该可以顺便使用 sed 或 awk 处理一下

我搞定了,我在stacksexchange发了个贴,最后自己查eww源代码找到入口了。

(defun my-eww-preprocess-html (start end)
  (save-excursion
    (save-restriction
      (narrow-to-region start end)
      (goto-char start)

      ;; (print (buffer-substring start end))
      (replace-regexp-in-region "<title>.*</title>"
                "<title> hello world </title>"
                (point-min) (point-max))
      ))
  )


(advice-add 'eww--preprocess-html
        :after 'my-eww-preprocess-html)
                                         
)

这个甚至在 libxml 进场解析前就开始html更改,先识别网站,然后可以依据网站内容去除掉大量不需要的东西,加快后续渲染速度。

3 个赞