[译]Android WebView

原文地址:https://crosswalk-project.org/#wiki/android-webview

  • 架构&组件

    • AOSP中的Android WebView将基于AwContents,其位于Content API和Content View之上。
    • 与Content API不同,它还依赖于从最初的chrome browser分离出来的组件,组件位于components/下,包含auto_login_parser,navigation_interception,visitedlink_browser,visitedlink_renderer和web_contents_delegate_android,这些都是用于页面。
    • 无渲染进程(进程内渲染),无沙盒机制(sandbox机制)
    • 图形架构和Content Shell有很大的不同,且正在开发中,将支持软件和硬件输出。
  • API

    • API类似于EFL WebView,不会暴露内部的browser/renderer/gpu进程。
    • 能够加载URL,接收加载过程中的事件和回调。
    • 可通过addJavaScriptInterface扩展JavaScript API,允许JavaScript调用Java代码,反之这不支持。
    • 提供了若干API接收页面状态改变通知和页面回调。
  • 消息循环和事件处理

    • 整合利用Android消息处理
    • native代码设置定时器到Java侧的消息循环
  • 图形

    • 渲染使用chromium合成器,开启了硬件加速
    • 合成器输出支持软件和硬件Surface
    • 硬件加速的架构和content shell不同,和ChromeOS类似。现在还处在早期开发阶段,使用了UberCompositor,支持软件输出
  • WebAPI扩展

    • API addJavaScriptInterface可用于JavaScript API扩展,但支持JavaScript调用Java代码。
    • 相反方向的调用(Java -> JavaScript)不支持
    • addJavaScriptInterface通过NPObject机制(之前用于NPAPI插件)支持进程外访问,虽然在WebView中不再需要。
    • 来自Java侧的事件通知貌似还不支持
  • API细节和涵盖范围

    • WebViewClient用于页面状态改变通知
    • WebChromeClient包含参与渲染逻辑的回调
    • 原生代码/JS交互
    • 页面加载
    • 导航&历史记录
    • 文字搜索
    • 事件处理
    • 轨迹球、触摸、键盘
    • 不支持鼠标事件
    • 设置:编码
    • 页面信息:标题、favicon
    • HTTPS/SSL
    • 页面加载状态、缩放、重定向、URL重载,等等
  • 源码

Comments