ef2*_*011 66 android webview webviewclient webchromeclient
从这个很好的解释有关之间的差异WebViewClient,并WebChromeClient似乎如果你使用一个,你不应该使用其他的(对于相同的WebView对象).
我的理解是否正确?
如果没有,何时会同时使用WebViewClient 和 WebChromeClient同一个WebView对象?
是否存在仅使用两者WebViewClient 和 WebChromeClient同一WebView对象才能实现某个目标的情况的示例?
NoB*_*ugs 86
你当然可以使用它们,它们只是具有不同的功能.设置自己的自定义WebViewClient可以处理onPageFinished,shouldOverrideUrlLoading等,WebChromeClient允许您处理Javascript的alert()和其他功能.
只需创建自己的类,例如:
public class MyWebChromeClient extends WebChromeClient {
//Handle javascript alerts:
@Override
public boolean onJsAlert(WebView view, String url, String message, final android.webkit.JsResult result)
{
Log.d("alert", message);
Toast.makeText(context, message, 3000).show();
result.confirm();
return true;
};
...
Run Code Online (Sandbox Code Playgroud)
和/或
public class MyWebViewClient extends WebViewClient {
@Override
//Run script on every page, similar to Greasemonkey:
public void onPageFinished(WebView view, String url) {
view.loadUrl("javascript:alert('hi')");
}
...
Run Code Online (Sandbox Code Playgroud)
只需覆盖文档中描述的功能,然后在onCreate中设置客户端:
webview.setWebViewClient(new MyWebViewClient());
webview.setWebChromeClient(new MyWebChromeClient());
Run Code Online (Sandbox Code Playgroud)
您可以同时使用两个客户端.它很有用,因为它们都提供不同的功能.
例如,如果您想:
和
只有一个客户可以执行以下操作,这是不可能的:
WebView webView = (WebView) findViewById(R.id.web_view);
webView.setWebViewClient(new WebViewClient());
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
// Your custom code.
}
});
Run Code Online (Sandbox Code Playgroud)
由于shouldOverrideUrlLoading(WebView,String)方法的默认实现可以按原样用于上述情况 - 除非您想要其他行为,否则无需覆盖它.
| 归档时间: |
|
| 查看次数: |
64706 次 |
| 最近记录: |