webkitforandroid汇总

上传人:沈*** 文档编号:84829707 上传时间:2022-05-04 格式:DOC 页数:24 大小:472KB
返回 下载 相关 举报
webkitforandroid汇总_第1页
第1页 / 共24页
webkitforandroid汇总_第2页
第2页 / 共24页
webkitforandroid汇总_第3页
第3页 / 共24页
点击查看更多>>
资源描述
webkit for android网上有许多 webkit 的分析文章,其中针对an droid porti ng的一篇文章 WebKit - WebKitFor An droid,写的非常好,分析得非常深入。不过这篇文章针对的An droid 版本比较老(具体版本无从考究),因此本文将在这篇文章的基础上,加入an droid 4.0 webkit porti ng的一些内容。一、An droid WebKit简介Webkit 是一个开源的浏览器排版和渲染引擎,包含WebCore 和JavascriptCore 。WebKit有众多的实现 (Qt、Gtk, wi ndows, chromium, an droid, etc)。An droid 4.0平台的 Web 引擎框架采用了 WebKit中的WebCore Javascript 引擎则是采用 google 的V8引擎。An droid 4.0 的 webkit 采用了和 chromium 12.0.742.130 中 webkit 相同的 codebase , webkit 版本 为 534.30。二、An droid WebKit模块框架An droid 平台的 WebKit上层由Java语言封装,并且作为 API提供给An droid 应用开发者, 而底层使用 WebKit核心库 (WebCore )进行网页排版。WebKit模块分为两个部分 :Java层和C层(webkit库)。Java层和C层通过JNI相互调用,如图 1所示:javaC/C+ +图1 An droid WebKit模块框架在webkit其它平台的移植中,webkit层就是封装 WebCore ,为上层应用提供接口的。An droid 的平台 具有一定的特殊性,需要提供Java API接口,应用程序框架也是基于Java的,所以在 An droid 的移植中,webkit层实际上被拆成两部分,Java部分和C+部分,它们之间通 过JNI接口进行通讯。JNI是一种双向通讯机制,Java代码可以调用 C/C+代码,C/C+代码也可以调用 Java代码。通常,WebCore 中回调 Java 的代码都位于 WebKit(Android Implementation)层,但有一个例外,就是 Source/WebCore/platform/a ndroid /Geolocati on ServiceBridge.cpp,该文件也包含回调到 Java的代码。2.1 Java层框架2.1.1 Java层源码说明Java 层的代码位于 frameworks/base/core/java/android/webkit目录下。各文件的简单说 明如下:Accessibilitylnjector.javaBrowserFrame.javaByteArrayBuilder.javaCacheLoader.javaCacheManager.javaCallbackProxy.javaCertTool.javaClientCertRequestHandler.javaConsoleMessage.javaContentLoader.javaCookieManager.javaCookieSyncManager.javaDataLoader.javaDateSorter.javaDebugFlags.javaDeviceMotionAndroidOrientationManager.javaDeviceMotionService.javaDeviceOrientationService.javaDownloadLister.javaFileLoader.javaFindActionModeCallback.javaFrameLoader.javaGeolocationPermission.javaGeolocationService.javaHTML5Audio.java为 WebView 注入 Accessibility. Accessibity是为残障人士提供辅助支持的对WebCore 中Frame对象的Java层封装,用于创建 WebCore 中定义的 Frame,以及为该 Frame对象提供Java 层回调方法辅助对象,用于 byte块链表的处理。 android 4.0 WebKit 中 不再使用android 4.0 WebKit中不再使用Cache管理对象,负责 Java层Cache对象管理android 4.0 使用 chromium net处理缓存,不再需要该对象是用于处理 WebCore与UI线程消息的代理类。当有 Web事件产生时WebCore线程会调用该回调代理类,代理类 会通过消息的方式通知UI线程,并且调用设置的客户对象的回调函数。证书工具处理客户端证书请求来自WebCore 的Javascript控制台消息android 4.0 WebKit中不再使用根据_RFC2109一规范,管理 cookies。android 4.0 使用 chromium_net处理 Cookie,不再需要Cookies同步管理对象,该对象负责同步RAM和Flash之间的Cookies数据。实际的物理数据操作在基类WebSyncManager中完成。android 4.0 不再需要android 4.0 WebKit中不再使用日期排序。分类最近一周、最近一月、最近一年定义调试标志用于实现 DeviceMotion 和 DeviceOrientation实现SensorEventListener 接口,处理动作实现SensorEventListener 接口,处理方向变化下载侦听器接口android 4.0 WebKit中不再使用页内查找回调。注:Android 4.0 的页内查找有很多 bug,基本上不可用Frame载入器,用于载入网页 Frame数据用于管理浏览器UI的位置信息权限实现 java 侧的 GeolocationServiceAndroidHTML5 audio 支持类HTML5VideoFullScreen.javaHTML5Videolnline.javaHTML5VideoView.javaHTML5VideoViewProxy.javaHttpAuthHandler.javaHttpAuthHandlerlmpl.javaJniUtil.javaJsPromptResult.javaJsResult.javaJWebCoreJavaBridge.javaKeyStoreHandler.javaL10nUtils.javaLoadListener.javaMimeTypeMap.javaMockGeolocation.javaNetwork.javaOverScrollGlow.javaPerfChecker.javaPlugin.javaPluginData.javaPluginFullScreenHolder.javaPluginList.javaPluginManager.javaPluginStub.javaSearchBox.javaSearchBoxImpl.javaSelectActionModeCallback.javaSsICertLookupTable.javaSsICIientCertLookupTable.javaSslErrorHandler.javaSslErrorHandlerlmpl.javaStreamLoader.java全屏视频视图,仅提供给浏览器使用内嵌视频视图,仅提供给浏览器使用视频视图,仅提供给浏览器使用HTML5视频视图代理类HTTP认证请求,需要用户处理。比如登录路由器的管理页面。HttpAuthHandler 实现,仅用于 Android Java HTTP stack供JNI使用的实用类,用于获取cache目录等C代码无法直接 获取的信息,以及读取资源包中的文件等Js结果提示对象,用于向用户提示Javascript运行结果。Js结果对象,用于用户交互用Java与 WebCore 库中Timer和Cookies 对象交互的桥接代码。https相关处理字符串国际化,在使用chrome http stack 时用到载入器侦听器,用于处理载入器侦听消息。android 4.0 WebKit中不再使用MIME类型映射模拟地理位置信息该对象封装网络连接逻辑,为调用者提供更为高级的网络连接接口。用于实现OverScroller 效果性能测试插件处理相关插件处理相关插件处理相关插件处理相关插件处理相关插件处理相关定义搜索对话框接口搜索对话框接口实现页面内选择时的回调。BUG很多https相关处理https相关处理https相关处理https相关处理android 4.0 WebKit中不再使用UrllnterceptHandler.javaUrllnterceptRegistry.javaURLUtil.javaValueCallback.javaViewManager.javaViewStateSerializer.javaWebBackForwardList.javaWebBackForwardListClient.javaWebChromeClient.javaWebHistoryItem.javaWeblconDatabase.javaWebResourceResponse.javaWebSettings.javaWebStorage.javaWebSyncManager.javaWebTextView.javaWebView.javaWebViewClient.javaWebViewCore.javaWebViewDatabase.javaWebViewFragment.javaWebViewWorker.javaZoomControlBase.javaZoomControlEmbedded.javaZoomControlExternal.javaZoomManager.java用于-google gears ,已废弃用于google gears ,已废弃URL处理实用类回调接口,用于异步返回数据值子视图管理类,主要用于管理插件视图WebView视图序列化和反序列化该对象包含WebView对象中显示的历史数据。浏览历史处理的客户接口类,所有需要接收浏览历史改变的类 都需要实现该接口。Chrome客户基类,Chrome客户对象在浏览器文档标题、进 度条、图标改变时候会得到通知。该对象用于保存一条网页历史数据图标数据库管理对象,所有的WebView均请求相同的图标数据库对象封装某个资源的响应信息WebView的管理设置数据,该对象数据是通过 JNI接口从底层 获取。处理webstorage 数据库数据同步对象,用于 RAM数据和FLASH数据的同步操作。在html文本输入控件激活时,显示系统原生编辑组件Web视图对象,用于基本的网页数据载入、显示等UI操作。Web视图客户对象,在 Web视图中有事件产生时,该对象可 以获得通知。该对象对WebCore库进行了封装,将UI线程中的数据请求发送给 WebCore 处理,并且通过 CallbackProxy 的方式,通过 消息通知UI线程数据处理的结果。该对象使用 SQLiteDatabase 为WebCore 模块提供数据存取 操作。实现WebView 嵌入到Fragment 中实现html5 workers ,在UI线程和webkit线程开启单独的线 程缩放控件接口内置缩放控件扩展缩放控件,已废弃2.1.2 Java层主要类关系图维护WebView的缩放状态1) WebViewWebView 类是WebKit模块Java层的视图类,所有需要使用Web浏览功能的 An droid 应用程序都要创建该视图对象显示和处理请求的网络资源。目前,WebKit模块支持HTTP、HTTPS、FTP以及javascript 请求。WebView 作为应用程序的UI接口,为用户提供了 一系列的网页浏览、用户交互接口,客户程序通过这些接口访问WebKit核心代码。2) WebViewDatabaseWebViewDatabase 是WebKit 模块中针对 SQLiteDatabase对象的封装,用于存储和获取运行时浏览器保存的缓冲数据、历史访问数据、浏览器配置数据等。该对象是一个单实例对象,通过 getlnstanee方法获取 WebViewDatabase的实例。WebViewDatabase 是 WebKit模块中的内部对象,仅供WebKit框架内部使用。3) WebViewCoreWebViewCore 类是Java层与C层 WebKit核心库的交互类,客户程序调用WebView 的网页浏览相关操作会转发给BrowserFrame对象。当WebKit核心库完成实际的数据分析和处理后会回调 WebViweCore 中定义的一系列 JNI接口,这些接口会通过CallbackProxy 将相关事件通知相应的UI对象。4) CallbackProxyCallbackProxy 是一个代理类,用于 UI线程和 WebCore 线程交互。该类定义了一系列与用 户相关的通知方法,当WebCore 完成相应的数据处理,则会调用CallbackProxy类中对应的方法,这些方法通过消息方式间接调用相应处理对象的处理方法。5) BrowserFrameBrowserFrame 类负责URL资源的载入、 访问历史的维护、数据缓存等操作,该类会通过 JNI接口直接与 WebKit C 层库交互。6) JWebCoreJavaBridge该类为Java层WebKit代码提供与 C层WebKit核心部分的 Timer和Cookies操作相关的 方法。7) WebSettings该对象描述了 WEB浏览器访问相关的用户配置信息。8) DownloadListener下载侦听接口,如果客户代码实现该接口,则在下载开始、失败、挂起、完成等情况下,Dow nloadMa nagerCore对象会调用客户代码中实现的Dwo nloadListe ner方法。9) WebBackForwardListWebBackForwarList对象维护着用户访问历史记录,该类为客户程序提供操作访问浏览器历史数据的相关方法。10 ) WebViewClientWebViewClie nt类定义了一系列事件方法,如果An droid 应用程序设置了WebViewClie nt派生对象,则在页面载入、资源载入、页面访问错误等情况发生时,该派生对象的相应方法 会被调用。11)WebBackForwardListClientWebBackForwardListClie nt对象定义了对访问历史操作时可能产生的事件接口,当用户实现了该接口,则在操作访问历史时(访问历史移除、访问历史清空等)用户会得到通知。12)WebChromeClientWebChromeClient类定义了与浏览窗口修饰相关的事件。例如接收到Title、接收到Icon、进度变化时,WebChromeClie nt的相应方法会被调用。2.1.3流载入器(已废弃)在An droid 4.0之前的版本,数据载入都是在Java层实现的,从 4.0开始,An droid webkit引入了 chromium的部分代码,输入载入走的是C+代码。不过原有的Java代码仍然保留,可以在编译 webkit 时用 USE_CHROME_NETWORK_STACK 宏进行切换。2.2 C层框架2.2.1 C类与Java类的关系WebKit类一般被拆成两个,Java类和C+类。比如在Java API部分,有一个 WebView 类,在C+部分,也有一个 WebView 类。WebViewCore, WebSettings等等也是同样的。需要注意的是,JNI是C语言接口,所以 Java类并不能直接调用 C+代码,需要在 C+代 码中export岀C语言接口。所以代码中使用了一个技巧,在Java类中定义一个int成员变量(实际上是一个指针),指向对应的C+类,如下图所示:1 . BrowserFrame与BrowserFrame Java类相对应的 C+类为WebFrame( 文件名为WebCoreFrameBridge.cpp) ,该类为Dalvik 虚拟机回调 BrowserFrame类中定义的本地方法进行了封装。与BrowserFrame中回调函数(Java层)相对应的 C层结构定义如下: struct WebFrame:JavaBrowserFramejweak mObj;jweak mHistoryList; / WebBackForwardList objectjmethodID mStartLoadi ngResource;jmethodID mMaybeSavePassword;jmethodID mShould In terceptRequest;jmethodID mLoadStarted;jmethodID mTra nsiti on ToCommitted;jmethodID mLoadF ini shed;jmethodID mReportError;jmethodID mSetTitle;jmethodID mWin dowObjectCleared;jmethodID mSetProgress;jmethodID mDidReceiveIc on;jmethodID mDidReceiveTouchlc on Url;jmethodID mUpdateVisitedHistory;jmethodID mHa ndleUrl;jmethodID mCreateWi ndow;jmethodID mCloseWi ndow;jmethodID mDecidePolicyForFormResubmissio n;jmethodID mRequestFocus;jmethodID mGetRawResFile name;jmethodID mDen sity;jmethodID mGetFileSize;jmethodID mGetFile;jmethodID mDidReceiveAuthe nticatio nChalle nge;jmethodID mReportSslCertError;jmethodID mRequestClie ntCert;jmethodID mDow nl oadStart;jmethodID mDidReceiveData;jmethodID mDidF ini shLoad ing;jmethodID mSetCertificate;jmethodID mShouldSaveFormData;jmethodID mSaveFormData;jmethodID mAutoLogi n;AutoJObject frame(JNIE nv* env) return getRealObject(e nv, mObj);AutoJObject history(JNIE nv* env) return getRealObject(env, mHistoryList);该结构作为 WebFrame (C层)的一个成员变量(mJavaFrame ),在 WebFrame 构造函数中,用 BrowserFrame (Java 层)类的回调方法的method ID 初始化 JavaBrowserFrame结构的各个域。初始后,当WebCore ( C层)在剖析网页数据时,有Frame相关的资源改变,比如 WEB 页面的主题变化,则会通过mJavaFrame 结构,调用指定BrowserFrame 对象的相应方法,通知Java层处理。2 . JWebCoreJavaBridge与该对象相对应的C层对象为 JavaBridge , JavaBridge 对象继承了 TimerClient,CookieClie nt, KeyGe nerateorClie nt, FileSystemClie nt类,主要负责WebCore 中的定时器和Cookie 管理。与 Java层JWebCoreJavaBridge类中方法 method ID 相关的是JavaBridege中几个成员变量,在构造 JavaBridge 对象时,会初始化这些成员变量,之后有Timer或者Cookies 事件 产生,WebCore 会通过这些ID值,回调对应 JWebCoreJavaBridge的相应方法。3 . LoadListener与该对象相关的C层对象为 WebCoreResourceLoader ,与LoaderListener中回调函数(Java 层)相对应的C 层结构 是 struct resourceloader_t,该结构保存了LoadListener对象 ID、Can celMethod ID以及 Dow nloadFiledMethod ID等值。当有 Can cel 或者Download事件产生, WebCore 会回调 LoadListener 类中的 CancelMethod或者Dow nl oadFileMethod。4 . WebViewCore与 WebViewCore 相关的C类是 WebViewCorel,定义了两个数据结构,一个是WebViewCoreFields,对应于 Java 层 WebViewCore对象的成员变量,另一个是WebViewCore:JavaGlue,对应于 Java层 WebViewCore对象的成员方法。定义如下:/ Field ids for WebViewCorestruct WebViewCoreFields jfieldID m_n ativeClass;jfieldID m_viewportWidth;jfieldID m_viewportHeight;jfieldID m_viewportI nitialScale;jfieldID m_viewportMi ni mumScale;jfieldID m_viewportMaximumScale;jfieldID m_viewportUserScalable;jfieldID m_viewportDe nsityDpi;jfieldID m_webView;jfieldID m_drawlsPaused;jfieldID mowMemoryUsageMb;jfieldID m_highMemoryUsageMb;jfieldID m_highUsageDeltaMb; gWebViewCoreFields;/ struct WebViewCore:JavaGlue jweak m_obj;jmethodID m_scrollTo;jmethodID m_c onten tDraw;jmethodID m_layersDraw;jmethodID m_requestListBox;jmethodID m_ope nF ileChooser;jmethodID m_requestSi ngleListBox;jmethodID m_j sAlert;jmethodID m_jsC on firm;jmethodID m_j sPrompt;jmethodID m_jsUn load;jmethodID m_j sI nterrupt;jmethodID m_didFirstLayout;jmethodID m_updateViewport;jmethodID m_se ndNotifyProgressF ini shed;jmethodID m_se ndViewl nvalidate;jmethodID m_updateTextfield;jmethodID m_updateTextSelectio n;jmethodID m_clearTextE ntry;jmethodID m_restoreScale;jmethodID m_n eedTouchEve nts;jmethodID m_requestKeyboard;jmethodID m_requestKeyboardWithSelectio n;jmethodID m_exceededDatabaseQuota;jmethodID m_reachedMaxAppCacheSize;jmethodID m_populateVisitedL in ks;jmethodID m_geolocatio nPermissio nsShowPrompt;jmethodID m_geolocatio nPermissio nsHidePrompt;jmethodID m_getDeviceMoti on Service;jmethodID m_getDeviceOrie ntatio nService;jmethodID m_addMessageToC on sole;jmethodID m_formDidBlur;jmethodID m_getPlugi nClass;jmethodID m_showFullScree nPlugi n;jmethodID m_hideFullScree nPlugi n;jmethodID m_createSurface;jmethodID m_addSurface;jmethodID m_updateSurface;jmethodID m_destroySurface;jmethodID m_getC on text;jmethodID m_keepScree nOn;jmethodID m_se ndFin dAga in;jmethodID m_showRect;jmethodID m_ce nterFitRect;jmethodID m_setScrollbarModes;jmethodID m_set In stallableWebApp;jmethodID m_en terFullscree nF orVideoLayer;jmethodID m_setWebTextViewAutoFillable;jmethodID m_selectAt;AutoJObject object(JNIE nv* env) / We hold a weak refere nee to the Java WebViewCore to avoid memeory/ leaks due to circular refere nces whe n WebView.destroy() is not/ called man ually. The WebView and hence the WebViewCore could become/ weakly reachable at any time, after which the GC could null our weak/ refere nee, so we have to check the retur n value of this method at/ every use. Note that our weak refere nce will be n ulled before the/ WebViewCore is fin alized.retur n getRealObject(e nv, m_obj);WebViewCore类有个JavaGlue对象作为成员变量,在构建WebViewCore 对象时,用WebViewCore(Java层)中的方法ID值初始化该成员变量。并且会将构建的 WebViewCore对象指针复制给WebViewCore (Java 层)的 mNativeClass,这样将 WebViewCore (Java层)和 WebViewCore ( C层)关联起来。5 . WebSettingsWebSettings.cpp),该结构保存与WebSettings相关的C层结构是 struct FieldIds( 文件名了 WebSettings类中定义的属性ID以及方法ID,在构建Fieldlds对象时,会设置这些方法和属性的ID值。6 . WebView与WebView 相关的C层类是WebView ,该类中的 m_javaGlue 中保存着WebView (Java层)中定义的属性和方法 ID,在 WebView (C层)构造方法中初始化, 并且将构造的 WebView 对象(C层)的指针,赋值给 WebView 类(Java层)的 mNativeClass 变量,这样 WebView(Java层)和 WebView 对象(C层)建立了关系。三、基本流程分析3.1 webkit 初始化An droid 提供了 WebView 类,该类提供客户化浏览显示的功能。如果客户需要加入浏览器 的支持,可像使用其它视图类一样加入应用程序,显示给用户。当客户代码中第一次生成WebView 对象时,会初始化WebKit库(包括Java层和C层两个部分),之后用户可以操作WebView对象完成网络或者本地资源的访问。WebView 对象的生成主要涉及4 个类 CallbackProxy 、WebViewCore 、WebViewDatabase以及 BrowserFrame 。其中CallbackProxy 对象为WebKit 模块中 UI线程和WebKit 类库 提供交互功能,WebViewCore 是WebKit 的核心层,负责与C层交互以及 WebKit 模块C层类库初始化,WebViewDatabase 为WebKit模块运行时缓存、cookie 等数据存储提供支 持,BrowserFrame用于创建 WebCore 中的Frame,并为 Frame 提供Java层回调方法。WebKit模块初始化流程如下:实例化WebView* 创建 CallbackProxy 对象* 创建WebViewCore 对象1. 调用 System.loadLibrary 载入 webcore 相关类库(C 层)2. 如果是第一次初始化 WebViewCore 对象,创建WebCoreTherad 线程3. 创建EventHub对象,处理WebViewCore 事件4. 获取WebIconDatabase 对象实例5. 向WebCoreThread 发送初始化消息* 仓U建 BrowserFrame 对象 向 WebView 发送 WEBCORE_INTIALIZED_MSG_ID 消息,通知初始 化完成* 获取WebViewDatabase 实例* 调用in it初始化 WebView* 收到WEBCORE_INITIALIZED_MSG_ID 消息后,调用 nativeCreate3.1.1 JNI native 方法注册在创建 WebViewCore时进行,调用 System.loadLibrary 方法载入 webcore 相关类库,该过程由Dalvik虚拟机完 成,它会从动态链接库目录中寻找libWebCore.so类库,载入到内存中,并且调用WebKit初始化模块的 JNI_On Load方法(代码见WebCoreJniOnLoad.cpp)。WebKit 模块的JNI_OnLoad 方法中完成了如下初始化操作:1. 初始化 JavaBridgeregisterJavaBridge获取JWebCoreJavaBridge 类的 mNativeBridge 成员变量的 fieldID ,以及注册JWebCoreJavaBridge 类中的 native 方法2. 初始化 JniUtilregisterJniUtil注册JniUtil类中的native 方法3. 初始化 WebFrameregisterWebFrame获取BrowserFrame 类的 mNativeFrame成员变量的ID,以及注册 BrowserFrame 类中的n ative 方法4. 初始化 WebCoreResourceLoaderregisterResourceLoader获取 LoadListener 类的 mNativeLoader 成员的 ID,以及注册 LoadListener 类中的 native方法5. 初始化 WebViewCoreregisterWebViewCore获取 WebViewCore 类的java成员的ID,以及注册 WebViewCore 类中的native 方法6. 初始化 WebHistoryregisterWebHistory获取 WebHistoryItem 类的 java 成员的 ID,以及注册 WebBackForwardList 和WebHistoryItem 类中的 native 方法7. 初始化 WeblconDatabaseregisterWeblconDatabase注册WeblconDatabase 类中的native 方法8. 初始化 WebSettingsregisterWebSettings获取 WebSettings 类的java成员的ID,以及注册 native 方法9. 初始化 WebStorageregisterWebStorage注册 WebStorage 类的native 方法10. 初始化 WebViewregisterWebView获取 WebView 类的 mNativeClass 成员的ID,以及注册 native 方法11. 初始化 ViewStateSerializerregisterViewStateSerializer注册 ViewStateSerializer 类的 native 方法12. 初始化 GeolocationPermissionsregisterGeolocationPermissions注册 GeolocationPermissions类的 native 方法13. 初始化 MockGeolocationregisterMochGeolocation注册 MockGeolocation 类的 native 方法14. 初始化 HTML5AudioregisterMediaPlayerAudio注册HTML5 Audio 类的native 方法15. 初始化 HTML5VideoregisterMediaPlayerVideo16. 初始化DeviceMotio nAn dOrie ntatio nMan agerregisterDeviceMotio nAn dOrie ntatio nMan ager注册 DeviceMotionAndOrientationManager类的 native 方法17. 初始化 CookieManagerregisterCookieManager注册 CookieManager类的 native 方法18. 初始化 CacheManagerregisterCacheManager注册CacheManager 类的native方法3.1.2 UI线程和webcore 线程webcore 线程在第一次创建WebViewCore对象时创建,且只创建一次,该线程负责处理WebCore 初始化事件。WebViewCore 构造函数会被阻塞, 直到WebCoreThread 初始化完 成。在 WebViewCore 对象构造最后一步,发送 INITIALIZE 消息给WebCoreThread ,执 行 webcore 相关的初始化 (WebViewCore:initialize)。在 WebViewCore:initialize方法中,会创建 BrowserFrame 对象, 并且向 WebView 对象发送WEBCORE_INITIALIZED_MSG_ID 消息。WebView 收到消息后,会执行 nativeCreate 方法, 创建c层的WebView 对象。3.1.3初始化过程序列图3.2 loadDataloadData 用于加载data:形式的url,通过该方法,可以将文件内容读入到字符串,然后通过loadData进行加载,是最简单的一种数据加载方法。比如:webview.loadData(“ vhtmlvbodyhello” , text/html ” , utf-8 ” );3.2.1 loadData 序列图
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!