• 请不要在回答技术问题时复制粘贴 AI 生成的内容
liuidetmks
V2EX  ›  程序员

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

  •  
  •   liuidetmks · Jul 16, 2021 · 2243 views
    This topic created in 1820 days ago, the information mentioned may be changed or developed.

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

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

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


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

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

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

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

    HOOK 页面方法太多了,默认 android/ios webview 都可以重载 url 。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   929 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 22:23 · PVG 06:23 · LAX 15:23 · JFK 18:23
    ♥ Do have faith in what you're doing.