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

请教一个 WebView 的古怪问题

  •  
  •   RuralHunter · 2023-06-26 20:55:51 +08:00 · 8390 次点击
    这是一个创建于 514 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我在 Activity 里代码大概如下:

    webview.setWebViewClient(new MyWebViewClient());
    webView.loadUrl("https://www.aaa.com");
    

    结果在 WebViewClient.onPageFinished(WebView view, String url)里得到的 url 却是"https://www.bbb.com"。这个 aaa 和 bbb 的确是有点关系,是同一个站点的不同域名。我怀疑是不是重定向的问题,但在浏览器里打开 https://www.aaa.com 并没有任何重定向,在手机的 chrome 里打开也一样没有重定向。我在 WebViewClient 的几个相关的方法里分别打印了得到的 url ,按照 log 顺序如下:

    shouldInterceptRequest: https://www.aaa.com
    shouldOverrideUrlLoading: https://www.bbb.com
    onLoadResource: https://www.aaa.com
    onPageStarted: https://www.bbb.com
    doUpdateVisitedHistory: https://www.bbb.com
    onPageFinished: https://www.bbb.com
    

    这可能是什么原因?为什么这么奇怪?

    12 条回复    2023-07-04 20:54:59 +08:00
    imqiyue
        1
    imqiyue  
       2023-06-26 22:44:15 +08:00
    charles 抓包看下 http 请求是不是走了重定向
    hiro0729
        2
    hiro0729  
       2023-06-26 23:04:11 +08:00
    请求头的 UserAgent 带了 mobile 标识,网站通过判断 UserAgent 重定向到 wap 端了吧
    mxalbert1996
        3
    mxalbert1996  
       2023-06-26 23:41:33 +08:00 via Android
    WebView.setWebContentsDebuggingEnabled(true) 然后在 chrome://inspect 调试一下不就知道了
    zhwanng
        4
    zhwanng  
       2023-06-27 10:08:03 +08:00
    http 301 、302 的问题吧
    zongren
        5
    zongren  
       2023-06-27 16:04:57 +08:00
    就是跳转了吧,有可能 js 调用的
    RuralHunter
        6
    RuralHunter  
    OP
       2023-06-27 22:00:38 +08:00
    @hiro0729 应该不是的,我手机的浏览器肯定带了 mobile 标识了,打开也没有重定向。
    RuralHunter
        7
    RuralHunter  
    OP
       2023-06-27 22:14:47 +08:00
    @mxalbert1996 我的 api 版本可能太低? webview 没有这个 setWebContentsDebuggingEnabled 方法,另外 chrome 也打不开 chrome://inspect
    mxalbert1996
        8
    mxalbert1996  
       2023-06-27 22:31:20 +08:00 via Android
    @RuralHunter
    setWebContentsDebuggingEnabled() API 19 就有了,是个静态方法,你是不是在实例方法里找了?
    chrome://inspect 你是在桌面端打开的么?
    而且我关键词都给你了你搜一下不就知道了。
    https://blog.csdn.net/freak_csh/article/details/95585148
    RuralHunter
        9
    RuralHunter  
    OP
       2023-06-27 22:35:57 +08:00
    setWebContentsDebuggingEnabled 可以了,原来是个静态方法,但是 chrome 还是打不开 chrome://inspect ,显示 invalid url
    RuralHunter
        10
    RuralHunter  
    OP
       2023-06-27 22:38:29 +08:00
    @mxalbert1996 明白了,要 usb 连手机啊,我这个奇怪的问题是在手机上是好的,只有在 android studio 的模拟器里有问题,所以没法用手机测。
    RuralHunter
        11
    RuralHunter  
    OP
       2023-06-27 22:46:02 +08:00
    原来电脑上的 chrome://inspect 打开能看到模拟器,inspect 页面能够看到模拟器里我的 app ,可是点击 inspect 跳出来的 devtools 一直是空白的
    RuralHunter
        12
    RuralHunter  
    OP
       2023-07-04 20:54:59 +08:00
    好不容易发现 inspect 白屏的原因,原来 chrome 需要翻墙才能打开。然而打开 inpect 后发现更怪的问题了,我的 activity 一启动,在 inspect 里的网址栏显示的就是 bbb ,我就在 inspect 的网址栏里输入 aaa ,想看看它怎么重定向到 bbb ,结果根本没有重定向,打开的页面网址显示就是 aaa ,跟其它浏览器正常表现一样。最奇怪的是,从此以后我的 activity 里的 webview 再打开 aaa 也也不会到 bbb 了,log 里面都只显示 aaa ,从此以后就一直是我预期中的 aaa 了,再也没有出现问题,重新运行,不管 debug 或 inspect 开不开,都没有问题,没有 bbb 。为何如此诡异?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1044 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 19:32 · PVG 03:32 · LAX 11:32 · JFK 14:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.