V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
liuidetmks
V2EX  ›  程序员

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

  •  
  •   liuidetmks · 197 天前 · 1011 次点击
    这是一个创建于 197 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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


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

    5 条回复    2021-07-17 00:14:57 +08:00
    3dwelcome
        1
    3dwelcome  
       197 天前
    你是混合开发 APP 嘛,我个人觉得这方法有点奇怪,JS 就让前端处理不是挺好的。

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

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

    HOOK 页面方法太多了,默认 android/ios webview 都可以重载 url 。
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2097 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 13:26 · PVG 21:26 · LAX 05:26 · JFK 08:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.