찾다

 >  Q&A  >  본문

android - 为什么WebView中的shouldOverrideUrlLoading会循环执行?

是这样的,我发现myWebView.loadUrl(address);方法执行之后,有时候会把里面的参数address转换成一个奇怪的乱码,于是我想让它在shouldoverrideurlloading中先检测一下:(请看里面的注释)

        myWebView.loadUrl(address);
        myWebView.setWebViewClient(new myWebViewClient());
   
    class myWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {

            //我传进loadUrl中的参数是:http://www.zhihu.com/question/45968097/answer/100778963
            //但不知为何,有时候传进来的url到了这一步打印,会变成下面这样:
            System.out.println(url);
            //http://www.zhihu.com/?next=%2Fquestion%2F45968097%2Fanswer%2F100778963
            
            //于是我想把上面的url改成原本正常的样式,进行下面的字符串替换:
            if(url.contains("?next="))
            {
                url = url.replace("%2F", "/");
                url = url.replace("?next=/","");
                System.out.println("replace result--->"+url);
            }
            //但这样做之后replace result--->输出的url是正常了,但会一直循环执行,一致打印这一句replace result--->,页面也打不开,一直卡在那儿。请问这是什么原因?


            view.loadUrl(url);
            return false;
        }

为什么会循环执行?怎么解决呢..或者能不能告诉我为什么url会变成那种乱码。。


我想了一下,之所以会循环执行,是因为shouldOverrideUrlLoading中的 view.loadUrl(url);又把url变成错误的形式 //http://www.zhihu.com/?next=%2Fquestion%2F45968097%2Fanswer%2F100778963
了。所以为什么url会这样变化呢?这是不是android loadUrl算法的故障?

黄舟黄舟2773일 전691

모든 응답(2)나는 대답할 것이다

  • 怪我咯

    怪我咯2017-04-17 17:06:14

    주소를 정확하게 적어주시면 문제 없습니다. 그래도 안되면 다른 버전의 휴대폰을 사용해 보세요

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-17 17:06:14

    보이는 "잘못된 문자"는 잘못된 문자가 아니라 urlencode 인코딩입니다. "%2F"는 "/"이고 말씀하신 루프는 실제로 루프가 아니라 302페이지가 실행되는 것입니다. 당신이 보는 주소는 직접적으로 가리키는 것이 아니라 서버 경로에 의해 최종 대상 페이지로 리디렉션됩니다. 페이지 점프는 shouldOverrideUrlLoading 메소드로 모니터링할 수 있으므로 루프처럼 느껴집니다. 302 페이지 및 서버 측 라우팅과 관련하여 자세히 알아볼 수 있습니다.

    회신하다
    0
  • 취소회신하다