我的一个思路是,( 不是前端开发,对浏览器这些不熟悉,想法比较粗浅
)
替换 HTMLScriptElement src 的 setter 方法,
调用的时候,我自己调用我们 app 内部提供的 Js2NativeBridge 方法,
下载 js 文件,然后运行一下 eval(jsContent)
这样做一些定制化,例如可以做到根据 url 缓存,第二次加载就使用磁盘文件。
甚至,可以偷梁换柱,把 a.js, 我换成 a.modified.js 。(原始 js 文件太大,功能太多,裁剪一些无用的)
可是,这样 eval 一个 js 和 原始的 createElement 后 append 加载的是完全等效的吗。 会不会有什么我不知道的隐患?比如作用域之类的啥的。 进一步的,能让网页感知不到 a.js 被篡改了吗?
目前我试了,粗略用了下,显示和交互大致没问题。
但是还是没谱,机型太多了,果然恐惧源于未知😂
1
3dwelcome 2021-07-16 18:20:09 +08:00
你是混合开发 APP 嘛,我个人觉得这方法有点奇怪,JS 就让前端处理不是挺好的。
Webview 有自己的 JS 缓存,只要没过期,就不一定会走网络和你这个本地请求。 反而你自己去下载 JS,有点点多此一举了。 |
2
liuidetmks OP @3dwelcome 缓存只是顺带提升体验一个方面,主要是要替换 js,源 js(第三方)很慢,我想裁剪&添加一些自己的逻辑,放到我的 cdn 上,所以有这个问题。
|
3
ysc3839 2021-07-16 20:01:40 +08:00 via Android
什么平台?什么 WebView ?你需要选择支持 request handler 的 WebView,比如 CEF 就支持。
https://bitbucket.org/chromiumembedded/cef/src/master/ |
4
Rysle 2021-07-16 21:56:01 +08:00
WebViewClient#shouldInterceptRequest 接口可以实现自定义加载资源
|
5
3dwelcome 2021-07-17 00:14:57 +08:00
原来你只是 webview, 内部的页面不是自己写的?
HOOK 页面方法太多了,默认 android/ios webview 都可以重载 url 。 |