app 的 webview 中如何使用自己的加载器(自己 load js)?

2021-07-16 18:12:10 +08:00
 liuidetmks

浏览器中如何使用自己的加载器(自己 load js )?

我的一个思路是,( 不是前端开发,对浏览器这些不熟悉,想法比较粗浅
替换 HTMLScriptElement src 的 setter 方法, 调用的时候,我自己调用我们 app 内部提供的 Js2NativeBridge 方法, 下载 js 文件,然后运行一下 eval(jsContent)
这样做一些定制化,例如可以做到根据 url 缓存,第二次加载就使用磁盘文件。 甚至,可以偷梁换柱,把 a.js, 我换成 a.modified.js 。(原始 js 文件太大,功能太多,裁剪一些无用的)

可是,这样 eval 一个 js 和 原始的 createElement 后 append 加载的是完全等效的吗。 会不会有什么我不知道的隐患?比如作用域之类的啥的。 进一步的,能让网页感知不到 a.js 被篡改了吗?


目前我试了,粗略用了下,显示和交互大致没问题。
但是还是没谱,机型太多了,果然恐惧源于未知😂

1590 次点击
所在节点    程序员
5 条回复
3dwelcome
2021-07-16 18:20:09 +08:00
你是混合开发 APP 嘛,我个人觉得这方法有点奇怪,JS 就让前端处理不是挺好的。

Webview 有自己的 JS 缓存,只要没过期,就不一定会走网络和你这个本地请求。

反而你自己去下载 JS,有点点多此一举了。
liuidetmks
2021-07-16 18:30:27 +08:00
@3dwelcome 缓存只是顺带提升体验一个方面,主要是要替换 js,源 js(第三方)很慢,我想裁剪&添加一些自己的逻辑,放到我的 cdn 上,所以有这个问题。
ysc3839
2021-07-16 20:01:40 +08:00
什么平台?什么 WebView ?你需要选择支持 request handler 的 WebView,比如 CEF 就支持。
https://bitbucket.org/chromiumembedded/cef/src/master/
Rysle
2021-07-16 21:56:01 +08:00
WebViewClient#shouldInterceptRequest 接口可以实现自定义加载资源
3dwelcome
2021-07-17 00:14:57 +08:00
原来你只是 webview, 内部的页面不是自己写的?

HOOK 页面方法太多了,默认 android/ios webview 都可以重载 url 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/789966

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX