- bounty将在6天后过期**。回答此问题可获得+50声望奖励。Maya Rager希望奖励现有回答:我发现这个答案比公认的答案更有价值......我想奖励它。stackoverflow.com/questions/2835556/... and want to reward it.
setWebViewClient
与setWebChromeClient
在Android中有什么区别?
setWebViewClient
与setWebChromeClient
在Android中有什么区别?
4条答案
按热度按时间9jyewag01#
从source code:
使用WebChromeClient可以让你处理Javascript对话框、图标、标题和进度。Adding alert() support to a WebView
乍一看,WebViewClient和WebChromeClient有太多的不同之处。但是,基本上:如果你正在开发一个除了呈现HTML之外不需要太多特性的WebView,你可以只使用
WebViewClient
。另一方面,如果你想(例如)加载你正在呈现的页面的favicon,你应该使用WebChromeClient
对象并覆盖onReceivedIcon(WebView view, Bitmap icon)
。大多数时候,如果你不想担心这些事情...你可以这样做:
你的WebView(理论上)将实现所有功能(作为Android原生浏览器)。
deyfvvtc2#
我觉得这个问题需要更多的细节。我的答案是从Android编程的灵感,大书呆子牧场指南(第2版)。
加载URL必须在配置WebView之后完成,因此您最后才能完成。在此之前,您可以通过调用
getSettings()
获取WebSettings的示例并调用WebSettings.setJavaScriptEnabled(true)
来打开JavaScript。WebSettings是您可以修改WebView的三种方法中的第一种。它有各种属性可以设置,如用户代理字符串和文本大小。shouldOverrideUrlLoading(WebView, String)
实现。此方法确定在WebView中加载新URL时(如通过按链接)将发生的情况。如果返回true,则表示"不要处理此URL,我正在自己处理它"。如果返回false,你会说:"继续加载这个URL,WebView,我不会对它做任何事情。"默认的实现触发了一个带有URL的隐式Intent,就像你之前做的那样。现在,这将是一个严重的问题。一些Web应用程序做的第一件事是将你重定向到网站的移动版本。使用默认的WebViewClient,这意味着你会被立即转到用户的默认浏览器。这正是你要避免的。修复方法很简单-只要覆盖默认实现并返回false即可。
要挂接ProgressBar,您将使用WebView上的第二个回调:
WebChromeClient
.WebViewClient是响应渲染事件的接口;WebChromeClient是一个事件接口,用于响应浏览器周围的chrome元素发生的事件,包括JavaScript警报、图标,当然还有加载进度和当前页面标题的更新。
在
onCreateView(…)
中连接它。使用WebChromeClient来美化它。进度更新和标题更新都有自己的回调方法,onProgressChanged(WebView, int)
和onReceivedTitle(WebView, String)
。从onProgressChanged(WebView, int)
接收的进度是一个0到100的整数。如果是100,你就知道页面已经加载完毕,所以你可以通过将ProgressBar的可见性设置为View.GONE
来隐藏它。guz6ccqo3#
如果你想记录网页的错误,你应该使用
WebChromeClient
并覆盖它的onConsoleMessage
:vlju58qv4#
WebViewClient提供了以下回调方法,您可以使用这些方法干预
WebView
如何转换到下一个 * 内容 *。WebChromeClient提供了以下回调方法,
Activity
或Fragment
可以使用这些方法更新WebView
的 * 环境 *。