现在的位置: 首页 > 综合 > 正文

WebView

2013年09月23日 ⁄ 综合 ⁄ 共 2592字 ⁄ 字号 评论关闭

1.使用WebView不要忘记加 <uses-permission android:name="android.permission.INTERNET"></uses-permission>

  虽然WebView也继承自View,但它的包名是ndroid.webkit

 

 2. WebSettings : WebView组件有一个辅助类叫WebSettings,它管理WebView的设置状态,该对象可以通过WebView.getSettings()方法获得。

//得到WebSettings对象,设置支持Javascript的参数

webView.getSettings().setJavaScriptEnabled(true);

//设置可以支持缩放

webView.getSettings().setSupportZoom(true);

//设置默认缩放方式尺寸是far

webView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.FAR);

//设置出现缩放工具

webView.getSettings().setBuiltInZoomControls(true);

 

3

WebView调用assets目录下的本地网页和图片等资源非常方便,为了让WebView从apk文件中加载assets,Android SDK提供了一个schema,前缀为file:///android_asset/。WebView遇到这样的schema,就去当前包中的assets目录中找内容,如:

webView.loadUrl(file:///android_asset/html/test1.html);

 

 

4.WebChromeClient  和 WebViewClient

与WebView相关的辅助对象,除了WebSettings还有WebChromeClient和WebViewClient。

WebViewClient主要帮助WebView处理各种通知、请求事件,如:
onLoadResource
onPageStart
onPageFinish
onReceiveError
onReceivedHttpAuthRequest

 

WebChromeClient主要辅助WebView处理Javascript的对话框、网站图标、网站title、加载进度等,如:
onCloseWindow(关闭WebView)
onCreateWindow()
onJsAlert (WebView上alert无效,需要定制WebChromeClient处理弹出)
onJsPrompt
onJsConfirm
onProgressChanged
onReceivedIcon
onReceivedTitle

 

如果只是用来处理一些html的页面内容,只用WebViewClient就行了,如果需要更丰富的处理效果,比如JS、进度条等,就要用到WebChromeClient。

 5.WebView调用js函数,并得到返回值,在android中必须注册到webView中一个java对象,并在js函数执行完后,通过这个对象对应的名称调用它的方法来返回值。但是这要求html中每个将被java代码主动调用的js函数必须预先知道有这个对象注册,并且要知道它的回调函数。

这里采用把两个固定的js函数添加到html中,来辅助java代码的调用并得到返回值,这样使其它js函数不必写注册对象的回调代码:
(1)在webView的html中:
<script>
//必须添加进去的函数
function callJs(param,tag)
{
var result=getCallResult(param);
javahome.handleJsResult(result,tag);
}
//必须添加进去的函数
function getCallResult(param)
{
return param;
}
//这是任意函数
function fun1(param)
{
  var a=1+9;
  return param+" --  "+a;
}
</script>
(2)在java类中
//把本类对象以javahome这个名称注册到webView
webView.addJavascriptInterface(this, "javahome");
//在OnTouchListener中获取点击位置的内容

webView.setOnTouchListener(new View.OnTouchListener()
{
   public boolean onTouch(View v, MotionEvent event)
  {
      if(event.getAction()==MotionEvent.ACTION_UP)
     {
       Log.i("raw x,y",event.getRawX()+"   "+event.getRawY());
       Log.i("x,y",event.getX()+"   "+event.getY());
       String str=String.format("elementFromViewportPoint(%f,%f).tagName",event.getX(),event.getY());
       callJs(str,"tag21");
      }
   
    return false;
  }
});

//封装一层,tag用作每次调用的标志,以便回调时辨别

public void callJs(String jsFunParam,String tag)
{
  String str=String.format("javascript:callJs(%s,'%s')",jsFunParam,tag);
  Log.i("loadUrl",str);
  webView.loadUrl(str);
}

//在这个方法中接收js函数调用的返回值。
public void handleJsResult(String str,String tag)
{
  Log.i("handleJsResult "+tag ,str);
}

6.

 

 

 

 

 

 

 

 

 

在firefox地址栏中输入:about:config,会出现配置页面。
Chrome的网页渲染引擎也是webkit

抱歉!评论已关闭.