Android中的setWebViewClient
与setWebChromeClient
有什么区别?setWebViewClient与setWebChromeClient有什么区别?
回答
// Instance of WebViewClient that is the client callback.
private volatile WebViewClient mWebViewClient;
// Instance of WebChromeClient for handling all chrome functions.
private volatile WebChromeClient mWebChromeClient;
// SOME OTHER SUTFFF.......
/**
* Set the WebViewClient.
* @param client An implementation of WebViewClient.
*/
public void setWebViewClient(WebViewClient client) {
mWebViewClient = client;
}
/**
* Set the WebChromeClient.
* @param client An implementation of WebChromeClient.
*/
public void setWebChromeClient(WebChromeClient client) {
mWebChromeClient = client;
}
使用WebChromeClient让您处理JavaScript对话框,网站图标,标题和进度。看一下这个例子:Adding alert() support to a WebView
乍一看,有太多的区别WebViewClient & WebChromeClient。但是,基本上:如果您正在开发不需要太多功能但呈现HTML的WebView,则可以使用WebViewClient
。另一方面,如果您想(例如)加载正在呈现的页面的图标,则应使用WebChromeClient
对象并覆盖onReceivedIcon(WebView view, Bitmap icon)
。
大部分的时间,如果你不想操心这些东西你可以这样做:
webView= (WebView) findViewById(R.id.webview);
webView.setWebChromeClient(new WebChromeClient());
webView.setWebViewClient(new WebViewClient());
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl(url);
和你的WebView会(理论上)已经实现了所有功能(如Android本机浏览器)。
我觉得这个问题需要更多的细节。我的答案受到Android编程,书呆子牧场指南(第二版)的启发。
默认情况下,,JavaScript在WebView中关闭。你并不总是需要它,但对于某些应用程序,可能需要它。
加载URL必须在配置完WebView后完成,所以最后要做。在此之前,您通过调用getSettings()
来打开JavaScript以获取WebSettings实例并调用WebSettings.setJavaScriptEnabled(true)
。 WebSettings是您可以修改WebView的三种方法中的第一种。它具有可以设置的各种属性,如用户代理字符串和文本大小。
之后,您将配置您的WebViewClient。 WebViewClient是一个事件接口。通过提供您自己的WebViewClient实现,您可以响应渲染事件。例如,您可以检测渲染器何时开始从特定URL加载图像,或者决定是否向服务器重新提交POST请求。
WebViewClient有许多方法可以覆盖,其中大多数方法你不会处理。但是,您确实需要替换默认的WebViewClient的实现shouldOverrideUrlLoading(WebView, String)
。此方法确定在WebView中加载新URL时会发生什么情况,例如通过按链接。如果返回true,则说“不处理这个URL,我正在处理它”。如果您返回false,则表示“继续并加载此URL,WebView,我没有对它做任何处理。“
默认实现会引发URL的隐式意图,就像您之前做的一样。但现在,这将是一个严重的问题。某些Web应用程序所做的第一件事是将您重定向到网站的移动版本。使用默认的WebViewClient,这意味着您可以立即发送到用户的默认Web浏览器。这正是你想要避免的。 修复很简单 - 只需重写默认实现并返回false。
使用WebChromeClient云杉东西 既然你正在创建自己的WebView,让我们通过添加一个进度条,并与加载页面的标题更新工具栏上的字幕云杉它一点时间。
要连接ProgressBar,您将在WebView上使用第二个回调:WebChromeClient。
WebViewClient是一个响应渲染事件的接口; WebChromeClient是一个事件接口,用于响应那些应该改变浏览器周围铬元素的事件。这包括JavaScript警报,网站图标,当然还有更新加载进度和当前页面的标题。
挂在onCreateView(…)
。使用WebChromeClient修饰事物 进度更新和标题更新每个都有自己的回调方法, onProgressChanged(WebView, int)
和onReceivedTitle(WebView, String)
。您从onProgressChanged(WebView, int)
收到的进度是一个从0到100的整数。如果它是100,那么您知道 页面已完成加载,因此通过将ProgressBar的可见性设置为View.GONE
来隐藏ProgressBar。
免责声明:这一信息是取自Android的程序设计:大书呆子牧场指南从作者的许可。欲了解更多 有关此书的信息或购买副本,请访问 bignerdranch.com。
- 1. 继承与类别有什么区别
- 2. 有什么区别
- 3. 有什么区别
- 4. 有什么区别?
- 5. 有什么区别?
- 6. 有什么区别?
- 7. 有什么区别
- 8. 有什么区别?
- 9. 有什么区别?
- 10. 有什么区别
- 11. 有什么区别
- 12. float x []与float [] x有什么区别?
- 13. Gateway与Service Activator有什么区别?
- 14. Directory.EnumerateFiles与Directory.GetFiles有什么区别?
- 15. LinkedHashMaps与LinkedHashSets有什么区别?
- 16. 未来与未来有什么区别?
- 17. org.hibernate.dialect.PostgresPlusDialect与org.hibernate.dialect.PostgreSQL9Dialect有什么区别?
- 18. WallpaperManager.getInstance()与getSystemService(Context.WALLPAPER_SERVICE)有什么区别
- 19. 返回与否有什么区别?
- 20. Char.IsDigit()与Char.IsNumber()有什么区别?
- 21. OleDB与SQLClient有什么区别?
- 22. Rack与Passenger有什么区别?
- 23. Tableau与Pentaho:有什么区别?
- 24. 数组与对象有什么区别?
- 25. perror和fprintf与stderr有什么区别?
- 26. SocketConnection与DCOM连接有什么区别
- 27. reactjs与nextjs有什么区别
- 28. 微服务与webservices有什么区别?
- 29. ERROR_PATH_NOT_FOUND与ERROR_FILE_NOT_FOUND有什么区别?
- 30. MSP430与MSP430X有什么区别?
我增加了更多的信息 – Cristian 2010-05-14 17:22:58