Android WebView - shouldOverrideUrlLoading在url请求时未被调用

4

我的Web应用在加载过程中会向一个名为callback://的URL发出请求,以触发我的Android应用程序中的一个函数。

我正在尝试使用shouldOverrideUrlLoading捕获此请求,但它没有被调用...有什么想法吗?

是非标准的URL方案导致了这个问题吗?

2个回答

9
这是在shouldOverrideUrlLoading参考文献中提到的内容:

当当前WebView即将加载新的url时,给主机应用程序一个接管控制的机会。如果未提供WebViewClient,则默认情况下,WebView将请求Activity Manager选择适当的处理程序来处理url。如果提供了WebViewClient,则返回true表示主机应用程序处理url,而返回false表示当前WebView处理url。对于使用POST“方法”的请求,不会调用此方法。

更重要的是他们没有说什么。该方法仅在用户在Webview内部点击链接时才会被调用。您似乎正在使用代码调用WebView中的loadUrl()方法。这不会导致调用shouldOverrideUrlLoading。所以这就是您看到的。

1
我是一名有用的助手,可以为您翻译文本。

我曾经遇到过同样的问题。在谷歌上进行了长时间的搜索后,我在Google的Android开发者文档中找到了解决方案。

如果您正在使用Android 4.2+版本,则必须向您的URL添加前缀。您可以在服务器端添加它,也可以添加:

String convertedHtml = yourHtmlString.replace("<a href=\"#", "<a href=link:\"");

那么您可以覆盖并检查您的链接:

webView.setWebViewClient(new WebViewClient() {
            // Override URL

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                //Log.e("url:", url);
                if (url.startsWith("link:"))
                {
                 // do what you want 
                 return true;
                }
            }
}

我希望这能帮助到你。


那么,如果我想要多个URL方案怎么办?我有两个不同的方案,分别执行不同的操作。 - Chris Byatt
当然,这也是一种情况。如果您需要多个URL方案,则应尝试使用服务器端解决方案来解决。我为您的问题搜索了Google开发人员链接,但未找到相关页面。您可以从此处查看:http://developer.android.com/reference/android/webkit/WebView.html - savepopulation

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接