https://github.com/wukan1986/kwebspeaker
保持原排版可选段的网页朗读神器
https://github.com/wukan1986/kwebspeaker
tts web
Last synced: about 1 year ago
JSON representation
保持原排版可选段的网页朗读神器
- Host: GitHub
- URL: https://github.com/wukan1986/kwebspeaker
- Owner: wukan1986
- License: apache-2.0
- Created: 2018-06-20T05:57:44.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2019-10-18T14:13:45.000Z (over 6 years ago)
- Last Synced: 2025-01-23T09:44:48.308Z (over 1 year ago)
- Topics: tts, web
- Language: Java
- Homepage:
- Size: 974 KB
- Stars: 2
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# KWebSpeaker可选段的网页朗读神器
此APP最大的特点就是可以通过点击选取不同的段,直接进行朗读。
## 背景
由于IT人员长时间用眼,过于疲惫,一直想解决如果让眼休息的方法。2017年时在想是否有类似的软件能将公众号朗读出来就好了。
试用了好几款APP,存在以下问题。
1. 从头开始朗读。不能选段
2. 可以中间开始读的又需要在新窗口读,丢失了排版
3. 系统内置的Talkback,改变了操作方式,很难退出。
4. 系统内置的随选朗读只能读当前界面,没办法自动滚屏。
直到找到了Web Page Reader这款软件。满足了我的要求。但它也有缺陷:
1. 免费版锁屏时自动停止朗读,收费版只能在Google商店中下载,需翻墙,目前已经下架
2. N年没有更新维护
3. 不支用浏览器打开功能
4. 发送到功能,不能提前编辑,导致不能与国内大量APP兼容
5. 部分网页无法正常朗读
为了解决“用浏览器打开”问题,本人当时做了一个小APP,能注册成浏览器,然后转成发送到。两个软件配合使用。
最近忽心血来潮,要是能做成一个APP,能注入到微信一类的APP中,不用每次新打开公众号,这下能省不少流量吗?
故研究了一下微信抢红包外挂,结果发现AccessibilityService老读不到WebView控件,再加上选段功能需要获取DOM对象,但AccessibilityService拿到的对象只支持取文本和点击等功能,最后只好放弃。
但通过研究发现选段加朗读的功能并不复杂,不如干脆做成开源库。让微信、网易新闻客户端、UC浏览器、知乎(目前只是部分文章可朗读)等应用能酌情添加此功能,方便用户。
## 原理
通过JavaScript与WebView交互,实现选段与朗读。
1. setJavaScriptEnabled/addJavascriptInterface:启用JavaScript,并注册回调函数,这些函数需要添加@JavascriptInterface
2. 编写特殊的脚本,由WebView.loadUrl进行执行
3. 在网页中调用脚本中注册的回调函数,实际上调用到Java中对应的函数,实现了朗读
## 调试
由于遇到一些网页无法朗读,是构造的特殊脚本不兼容,需要调试。如何调试呢?本人将原来硬编码的脚本提取成了js文件,方便修改。
1. WebView.setWebContentsDebuggingEnabled(true)启用调试功能,默认已经开启
2. PC端通过数据线连接手机
3. 打开PC端Chrome浏览器,输入chrome://inspect/#devices,即可调试JS
4. 优先读取外部存储器的/storage/emulated/0/Android/data/com.github.wukan1986.kwebspeaker/cache/bell_pepper_info.js,文件不存在才读取assets下的bell_pepper_info.js
5. 使用传输文件(MTP)模式,将assets下的bell_pepper_info.js编辑好,然后覆盖到外部存储器相应文件即可。只有刷新页面,对应的js才会重新读取。
6. js中可以加console.log方便调试
通过此方法已经修复或找到了原因的网站有:
1. 凤凰网无法朗读(已修复)
2. 知乎遇到图片时总读一段乱码(已修复)
3. 百度手机版,无法朗读正文(iframe跨域,未解决,但可以全选复制绕过)
## 开源
协议:Apache Licene 2.0
为何开源?
1. 此技术和方法并非原创
2. 通过一个软件外挂其它软件的方式暂时本人技术上没走通,也许能有高手可以解决
3. 想让更多的软件开发商借此将朗读功能集成,方便广大用户
4. 想让安全专业人士帮验证一下WebView与JavaScript互调的方式是否有安全问题
5. 本人没有开发过iOS程序,也没有相应设备,希望有网友能与我联系(wu-kan@163.com),接手iOS版的开发,所用到的关键技术iOS都支持。
## 捐赠
如果您觉得这个软件能帮助到您的朋友,可向他们推荐。
如果您觉得某个软件很有必要加朗读功能,可以将此项目推荐给相应的产品经理和开发人员。
如果此软件对您有帮助,可以考虑捐赠来支持我。非常感谢!
捐赠方式:支付宝wu-kan@163.com(*侃)
