打开wml开关后,wml网页已经可以解析显示出来了,但是发现input输入框不能正常工作。
表现为点击之后直接崩溃或者点击之后不能输入文字。
这个问题主要是webkit与android framework的衔接有问题。看下面示意图:
Framework中的webview(UI)总是要与Webkit中的WMLInputElement打交道的,主要内容就两个
1. 点击事件。
webview需要通知input输入框各种点击事件,这条通知路径是通过Webviewcore最终到达WMLInputElement节点。
2. 获取当前节点的属性。这条通信路径是通过webview.cpp最终到达CacheBuild.cpp.
这里解释一下CacheBuild,cachebuild可以认为是DOM树的某种复制,但是会对树中元素做一些新的诠释。
那么现在要解决WML输入框的问题,就只要将JNI部分处理OK就好了。具体还是两部分:
1. 点击事件。
如上面所述,只要处理好webviewcore.cpp即可。搜素所有与htmlInput相关的关键字,对应生成一份wmlinput的处理代码。实际以android4.0为例,只要处理handleMouseClick()。
2. 获取Node属性。
对应的处理webview.cpp, 但是webview.cpp实际不区分是wmlinput还是html input,所以需要往下走一步,来到cacheBuild.cpp。 还是老样子,搜索所有与html input相关的内容,对应生成一份wml inut的代码。实际以android4.9为例,只有BuildFrame()一个地方。
题外话:当初这一步没做,发现输入框也能正常写入内容,但是会有各种奇怪的表现。最典型的就是输入文字时不能输入词组,每次都只会输入一个字符。
另外,android4.0 webkit框架部分有所改动,实际还碰到两个问题:
a. 提交输入框内容时总是为空。
原因是没有调用setValueFromRenderer()将UI控件中的值也就是我们看到的内容赋值给WMLinputElement。
android2.3的时候是在TextControlInnerTextElement::defaultEventHandler()中处理的,现在android4.0改了。参考HtmlInputElement,发现完全照搬有些困难,就直接在WmlInputElement的defaultEventHandler()中做了处理。
if (event->type() ==eventNames().webkitEditableContentChangedEvent && renderer() &&renderer()->isTextControl()) {
toRenderTextControl(renderer())->subtreeHasChanged();
b. 提交一次后,返回网页,然后再进入。发现WmlInputElement中刚才的提交内容都在,但是直接看不到,点击输入框后可以看到。
没办法,不知道怎么改UI,直接就将WML的缓存机制(pageStage)灭了。在initialize()方法中总是将初始值设为空。
更多详细信息请查看
java教程网 http://www.itchm.com/forum-59-1.html
分享到:
相关推荐
java毕业设计——javaWML信息查询与后端信息发布系统实现——WML信息查询设计(源代码+论文).zip java毕业设计——javaWML信息查询与后端信息发布系统实现——WML信息查询设计(源代码+论文).zip java毕业设计——...
支持WML1.0和WML1.1协议,可一将WML网页内容保存或转换成HTML或者txt~!也可以进行手机网页上网~!
JAVAWML信息查询与后端信息发布系统旨在为用户提供一种便捷的方式来查询WML(Wireless Markup Language)信息,并为后端信息发布提供支持。该系统的设计包括以下主要功能: WML信息查询:用户可以通过系统查询WML...
Learning WML & WML Script
JAVA WML信息查询与后端信息发布系统实现——WML信息查询设计(源代码+论文)(共201个子文件),供大家参考学习,目录结构: HIIS(200个文件) WML信息查询与后端信息发布系统实现——WML信息查询设计.doc
作为一种编辑语言,WMLScript提供了强大的函数、语句和库功能,以及外部编辑、访问控制等支持,同时对程序运行中可能产生的错误给出了检测手段和具体的解决办法。这些内容属于WMLScript的脚本程序设计知识和...
WML教程之文本框控件Input
请先建栏目指向WML功能模块,在添加删除内容中添加WML代码,然后用[getwml=标题ID]调用或直接转成UBB语法 [getwml=标题ID]这个是调用代码 可以了哦 好!哦我们自己的系统出来了! 其实都很简单, 代码里的意思...
WML语言参考教程,适合初学者,主要讲授WML初步知识
Wml 和WMLScript 中文文档是学习wap的很好的书籍,而且电子书是高清晰的,看过不会后悔的
WML同样支持在标志中标出属性。属性是标志的附加信息,与元素的内容不一样,它并不在屏幕上显示出来。属性通常在元素的开始标志后指定。如上面最后一个例子。 由于WML是XML的一种应用,因此所有的WML标记和属性都...
JAVAWML信息查询与后端信息发布系统实现——WML信息查询设计(源代码+论文)JAVAWML信息查询与后端信息发布系统实现——WML信息查询设计(源代码+论文)JAVAWML信息查询与后端信息发布系统实现——WML信息查询设计(源...
JAVAWML信息查询与后端信息发布系统实现——WML信息查询设计(源代码+论文) JAVAWML信息查询与后端信息发布系统实现——WML信息查询设计(源代码+论文) JAVAWML信息查询与后端信息发布系统实现——WML信息查询设计(源...
主要对WML的标签介绍其详细的用法 语法及属性 WML标签速查手册
该系统旨在为用户提供一个便捷的无线应用环境下的信息查询平台,同时支持后端信息发布与管理。 **主要功能特点:** 1. **WML信息查询**:系统采用WML语言编写,适配移动设备屏幕尺寸和操作习惯,提供高效、简洁的...
JAVAWML信息查询与后端信息发布系统实现——WML信息查询设计(源代码+LW).zipJAVAWML信息查询与后端信息发布系统实现——WML信息查询设计(源代码+LW).zipJAVAWML信息查询与后端信息发布系统实现——WML信息查询设计...
JAVAWML信息查询与后端信息发布系统实现——WML信息查询设计(源代码+lw).rarJAVAWML信息查询与后端信息发布系统实现——WML信息查询设计(源代码+lw).rarJAVAWML信息查询与后端信息发布系统实现——WML信息查询设计...
利用xslt将wml转换为html
JAVAWML信息查询与后端信息发布系统实现——WML信息查询设计.zip