ding ( view,url) 是一个在类中定义的方法,网上有的博客说该方法的作用是当返回值是 true 的时候控制 Url 在当前打开,为 false 时调用系统浏览器或第三方浏览器打开 。但实际上这种说法是错误的 。
①
webView = (WebView) findViewById(R.id.webView);//WebView加载web资源webView.loadUrl("http://baidu.com");
当运行上面这段代码时,APP 会调用外部浏览器打开网页 。
②
webView = (WebView) findViewById(R.id.webView);//WebView加载web资源webView.loadUrl("http://baidu.com");//覆盖WebView默认使用第三方或系统默认浏览器打开网页的行为,使网页用WebView打开webView.setWebViewClient(new WebViewClient(){@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {// TODO Auto-generated method stubview.loadUrl(url);return true;}});
当运行上面这段代码时,APP 会在内部的中访问网址 。
文章插图
【关于安卓中的 shouldOverrideUrlLoading 方法的问题】所以有人就认为是这段代码完成了这一个功能,并进一步推定当返回值是 true 的时候控制去打开,为 false 调用系统浏览器或第三方浏览器 。
**这就更大错特错了!**因为
③
webView = (WebView) findViewById(R.id.webView);//WebView加载web资源webView.loadUrl("http://baidu.com");//覆盖WebView默认使用第三方或系统默认浏览器打开网页的行为,使网页用WebView打开webView.setWebViewClient(new WebViewClient(){@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {// TODO Auto-generated method stubview.loadUrl(url);return false;}});
即将返回值从 true 改为 false,发现 APP 还是会在内部的中访问网址 。
更极端地:
④
webView = (WebView) findViewById(R.id.webView);//WebView加载web资源webView.loadUrl("http://baidu.com");//覆盖WebView默认使用第三方或系统默认浏览器打开网页的行为,使网页用WebView打开webView.setWebViewClient(new WebViewClient());
文章插图
根本没有重写这个方法,只是将一个新初始化的设置成了当前获得的的默认而已,同样 APP 还是会在内部的中访问网址 。
所以 ding ( view,url) 方法根本不是这个功能,有些帖子纯粹是误人子弟 。而只要设置了自定义的,应用就会从默认调用外部浏览器打开网址变为默认在本地上打开网址 。
查阅官方文档,其中关于 ding 方法的使用是这样的
private class MyWebViewClient extends WebViewClient {@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {if ("www.example.com".equals(Uri.parse(url).getHost())) {// This is my website, so do not override; let my WebView load the pagereturn false;}// Otherwise, the link is not for a page on my site, so launch another Activity that handles URLsIntent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));startActivity(intent);return true;}}
在官方示例之前的代码中,已经设置了的默认为上边定义的,从该方法内部实现的功能可以看出该方法实际上在 .() 方法执行时就会被自动调用,进行拦截处理操作 。以下是官方的解释:
Give the host application a chance to take control when a URL is about to be loaded in the current WebView. If a WebViewClient is not provided, by default WebView will ask Activity Manager to choose the proper handler for the URL. If a WebViewClient is provided, returning true causes the current WebView to abort loading the URL, while returning false causes the WebView to continue loading the URL as usual.当一个URL即将被加载到当前的WebView中时,给主机应用程序一个控制的机会 。如果没有提供WebViewClient,默认情况下,WebView会要求Activity Manager为URL选择合适的处理方式 。如果提供了一个WebViewClient,返回true会导致当前WebView中止加载URL,而返回false会导致WebView继续像往常一样加载URL 。
- 百元手机排行榜2020前十名,百元安卓手机推荐
- 一切会更好,写一个关于诚信的名言警句
- 红楼梦中的李纨:揭开李纨没有成为荣府大管家之谜
- 夏姬之乱是怎么回事?历史中的夏姬究竟多妖娆
- 为什么僵尸片中的僵尸穿都统一穿清朝服装
- 历代文人人心中的一个梦:名妓苏小小
- 古代美男:中国古代文学家中的第一美男子是谁?
- 爱情书籍排行榜前十名,关于爱情的书籍
- 四大名捕中的诸葛正我究竟是好人是坏人
- 揭开史书中的那些玩笑:明武宗曾封自己为总兵