【问题标题】:How to intercept url loads in WebView (android)?如何拦截 WebView(android)中的 url 加载?
【发布时间】:2012-11-25 11:13:09
【问题描述】:

我有一个 WebView,我在其中加载了一个带有自定义链接(如 app://action)的页面。我在清单文件中注册了 url 方案,当我单击链接时,我的 Activity 的 onResume() 方法会使用正确的数据调用并且它工作正常。

我的问题是 WebView 仍然尝试加载链接,而我的 WebView 最终显示“网页不可用”消息。我不想那样。

如何防止 WebView 加载 url?

这是我的代码:

WebView banner = ...
banner.setWebViewClient(new WebViewClient() {

    @Override
    public void onLoadResource(WebView view, String url) {

        if (url.startsWith("app://")) {

            Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url), getContext(), Main.class);
            //startActivity(i);
        }
    }
}

banner.loadUrl("url_to_the_banner");

【问题讨论】:

    标签: android webview android-webview


    【解决方案1】:

    改用 WebViewClient.shouldOverrideUrlLoading。

    public boolean shouldOverrideUrlLoading(WebView view, String url){
        // handle by yourself
        return true; 
    }
    

    WebViewClient Reference

    更新:方法 shouldOverrideUrlLoading(WebView, String) 在 API 级别 24 中已弃用。请改用 shouldOverrideUrlLoading(WebView, WebResourceRequest)

    【讨论】:

    • 如果 Webview 中的点击是指向自定义 URL 的链接(如 myurl://parameters),它不会被调用。如何解决这个问题?
    【解决方案2】:

    但否则它必须返回 false,所以:

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url){
        if(url.startsWith(myString){
            // handle by yourself
            return true;
        } 
        // ...
        return false;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-26
      • 2015-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-18
      • 1970-01-01
      相关资源
      最近更新 更多