shouldOverrideUrlLoading返回方法

5
我正在使用以下方法 - 并返回truesuper.shouldOverrideUrlLoading(view,url); 抱歉我很天真,但我不明白返回true或超类方法有什么区别?
 @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            UltimatixTouchWebView webView = (UltimatixTouchWebView) view;

            if (null != url && ((url.endsWith(".js") || url.endsWith(".css")))
                    && (checkResource(url))) {
                return true;
            } else {
                return super.shouldOverrideUrlLoading(view, url);
            }
        }

在与三个不同的资源讨论并查阅文档后,我仍然觉得含义模糊不清且无法理解,因此提出了这个问题。在提问前我已经付出了足够的努力。 - Darpan
1
阅读此内容:https://dev59.com/5FTTa4cB1Zd3GeqPowwH - IliaEremin
2个回答

20

我花了一些时间并对所有场景进行了一些排列组合。这就是我发现的 -

  1. return false -> 如果您使用此选项,则甚至不需要加载URL,即不需要放置loadUrl(url)WebView将自动加载URL。

  2. return true -> 当前URL将不会在WebView中加载,引用Android网站

      

    如果提供了WebViewClient,则返回true表示主机应用程序处理URL

因此,您的应用程序将处理该URL。 即。 您的应用程序必须具有一些功能来处理该URL。 即使您只想在您的WebView中重新加载页面,您也必须编写webView.loadUrl(URL);。 否则它将无法加载您的页面。

在此示例中,假设您要从第一页转到second.html。

public boolean shouldOverrideUrlLoading(WebView view, String url) {
                if(url.contains("second.html")){
                    Toast.makeText(con, "Second Page", Toast.LENGTH_LONG).show();
                    view.loadUrl(url);
                    }
                return true;
}

在这里,如果你点击第二页上的任何链接,它将不会跳转到任何地方。因为在这个函数中,你的if条件没有被满足,它返回true,所以它会检查应用程序是否已实现某些内容。由于我们还没有实现,所以它只会停留在原地。

我试图简化它,以帮助新开发者。


1
如果你返回 true,那么意味着你处理了该事件,操作系统将不会对此事件做任何处理。
如果你调用了 super 函数,那么你会让操作系统处理该事件(在浏览器中打开它)。

1
我返回了超级函数,但没有看到浏览器在任何地方加载它..可能我错过了一个小细节.. - Darpan

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