如何在 Android Web 视图中检测重定向

Posted

技术标签:

【中文标题】如何在 Android Web 视图中检测重定向【英文标题】:How To Detect Redirects in Android Web view 【发布时间】:2017-02-08 14:48:22 【问题描述】:

经过多次重定向后,url 最终出现在 Webform 中我如何退出 webview ? 有没有一种方法可以检测网页视图中的 html 元素,例如页面中的按钮。我不能在这里使用 javascript,因为我不拥有这些网站

public class ProductionWebView extends Activity


    private WebView webView;
    String url ="https://www.google.lk/?gws_rd=ssl";



    @SuppressLint("JavascriptInterface")
    public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.production_webview);
        webView = (WebView) findViewById(R.id.webView1);
        webView.getSettings().setLoadsImagesAutomatically(true);
        webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
        webView.loadUrl(url);

        //ws.setJavaScriptEnabled(true);
        webView.addJavascriptInterface(new Object()
        
          public void performClick()
          
              // Deal with a click on the OK button
          
        , "Next");
        webView.addJavascriptInterface(new Object()
        

          public void performClick()
          

          
        , "Authorize");        

    



【问题讨论】:

【参考方案1】:

您可以使用 webClient 并实现 shouldOverrideUrlLoading 在 WebView 加载它们之前拦截所有 url。

mWebView.setWebViewClient(new WebViewClient() 


    @Override
    public boolean shouldOverrideUrlLoading(WebView webView, String url) 

       // Here put your code to exit

       // return true; //This indicates WebView to NOT load the url;
       // return false; //Allow WebView to load url
    
);

【讨论】:

感谢您的回复。如果 Web 视图有多个重定向,您如何使用此代码跟踪它们?我尝试了代码,但现在甚至没有加载第一个 url @SheshanGamage 你返回 false 了吗? 我使用了这个块 ` webView.setWebViewClient(new WebViewClient() @Override public boolean shouldOverrideUrlLoading(WebView webView, String url) if(webView.getUrl().contains("code")) 返回真;否则返回假;); ` 但它现在不加载它给我假并且不加载任何东西 @SheshanGamage 您已经将 Url 作为参数。尝试使用它.. 问题是方法dosent迭代:(它只是第一次工作。【参考方案2】:

如果你想操纵 URL,那么覆盖这个:

public boolean shouldOverrideUrlLoading (WebView view, String url)
       view.loadUrl(request.getUrl().toString());
       return true;

[WebViewClient Reference]

【讨论】:

请查看我的回答中提到的链接@佘山游戏 检查这个***.com/a/5125620/2826147我认为你需要什么。@Sheshan Gamage【参考方案3】:

你需要创建一个这样的方法

webview.setWebViewClient(new WebViewClient() 
    public boolean shouldOverrideUrlLoading(WebView view, String url)
        // do your action here
        view.loadUrl(url);
        return false; // then it is not handled by default action
   
);

【讨论】:

如果 Web 视图有多个重定向,您如何使用此代码跟踪它们?我试过了,但它现在甚至没有加载第一个 url 你可以在shouldOverrideUrlLoading方法中输入log来获取所有重定向信息

以上是关于如何在 Android Web 视图中检测重定向的主要内容,如果未能解决你的问题,请参考以下文章

Android 通过验证用户名和密码使用重定向 url 在 Web 视图中查看 .pdf 文件

如何在 UIWebView 中检测重定向

如何通过 Android 应用程序的链接重定向到 youtube 应用程序?

Android WebView:拦截重定向请求?

检测设备是iOS还是Android,然后重定向

在 React Native 中从应用程序本身的 web 视图重定向到移动应用程序