修改浏览器使之支持WML格式页面,【设计思想解读开源框架】

获取到服务器返回的数据中的content-type字段值后,会调用这个类里面的isXMLMIMEType()方法来判断是否按照XML格式来解析。我们看这个方法:

?

1
2
3
4
5
6
7
bool DOMImplementation::isXMLMIMEType( const String& mimeType) {
     if (mimeType == "text/xml" || mimeType == "application/xml" || mimeType == "text/xsl" )
         return true ;
     static const char * const validChars = "[0-9a-zA-Z_\\-+~!$\\^{}|.%'`#&*]" ; // per RFCs: 3023, 2045
     DEFINE_STATIC_LOCAL(RegularExpression, xmlTypeRegExp, (String( "^" ) + validChars + "+/" + validChars + "+\\+xml$" , TextCaseSensitive));
     return xmlTypeRegExp.match(mimeType) > - 1 ;
}

这里只包含了text/xml, application/xml, text/xls. 我们需要把WML相应的MiMeType类型加进去

?

1
If(mimeType == “text/vnd.wap.wml”) return true ;

修改framework/base/core/java/android/webkit/LoadListener.java, 源码如下:

?

1
2
3
4
5
6
7
8
9
// Does the header parsing work on the WebCore thread.
private void handleHeaders(Headers headers) {
    
}
else if (mMimeType.equals( "text/vnd.wap.wml" )) {
     // As we don't support wml, render it as plain text
     mMimeType = "text/plain" ;
  
}

我们可以看到, 原来是不支持wml格式的, 都当做text/plain来处理了,这样显然是不能正确显示的。 所以这一行mMimeType = “text/plain”;需要注释掉,打开给外围。

2. 对WML中的超链接元素(WMLAElement和WMLAnchorElement)中href属性值里面的变量替换。

笔者发现,在一个WML的登陆页面上,填入用户名和密码后,点击登陆,附加到url后面的用户名和密码是 ( u s e r n a m e ) 和 (username) 和 (username)(password) ,有web开发经验的XDJM都知道,这是没有将变量替换为页面上相应值。我们看WMLAElement.cpp中处理点击事件的方法:

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
void WMLAElement::defaultEventHandler(Event* event) {
     if (isLink() && (event->type() == eventNames().clickEvent || (event->type() == eventNames().keydownEvent && focused()))) {
         MouseEvent* e = 0 ;
         if (event->type() == eventNames().clickEvent && event->isMouseEvent())
             e = static_cast<MouseEvent*>(event);
  
         KeyboardEvent* k = 0 ;
         if (event->type() == eventNames().keydownEvent && event->isKeyboardEvent())
             k = static_cast<KeyboardEvent*>(event);
  
         if (e && e->button() == RightButton) {
             WMLElement::defaultEventHandler(event);
             return ;
         }
  
         if (k) {
             if (k->keyIdentifier() != "Enter" ) {
                 WMLElement::defaultEventHandler(event);
                 return ;
             }
  
             event->setDefaultHandled();
             dispatchSimulatedClick(event);
             return ;
         }
  
         if (!event->defaultPrevented() && document()->frame()) {
             String url = document()->completeURL(deprecatedParseURL(getAttribute(HTMLNames::hrefAttr)));
             /
             document()->frame()->loader()->urlSelected(url, target(), event, false , false , true , SendReferrer);
         }
  
         event->setDefaultHandled();
     }
}

通过打印Log发现,getAttribute(HTMLNames::hrefAttr)获取的只是href后面的字符串,包含变量$(). 我们需要对其中的变量进行转化。还好WMLVariables里面已经提供了相应的方法substituteVariableReferences,不需要我们再去写一个了。修改如下

#include “WMLVariables.h”

?

1
2
3
4
5
6
if (!event->defaultPrevented() && document()->frame()) {
     // Substitute variables within target url attribute value. String href = getAttribute(HTMLNames::hrefAttr);
     href = substituteVariableReferences(href, document(), WMLVariableEscapingEscape);
     String url = document()->completeURL(deprecatedParseURL(href));
     document()->frame()->loader()->urlSelected(url, target(), event, false , false , true , SendReferrer);
}

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
img

分享读者

作者2013年java转到Android开发,在小厂待过,也去过华为,OPPO等大厂待过,18年四月份进了阿里一直到现在。

被人面试过,也面试过很多人。深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长,而且极易碰到天花板技术停滞不前!

我们整理了一份阿里P7级别的Android架构师全套学习资料,特别适合有3-5年以上经验的小伙伴深入学习提升。

主要包括腾讯,以及字节跳动,阿里,华为,小米,等一线互联网公司主流架构技术。如果你有需要,尽管拿走好了。

腾讯T3架构师学习专题资料

如果你觉得自己学习效率低,缺乏正确的指导,可以点击加入资源丰富,学习氛围浓厚的技术圈一起学习交流吧

群内有许多来自一线的技术大牛,也有在小厂或外包公司奋斗的码农,我们致力打造一个平等,高质量的Android交流圈子,不一定能短期就让每个人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。

35岁中年危机大多是因为被短期的利益牵着走,过早压榨掉了价值,如果能一开始就树立一个正确的长远的职业规划。35岁后的你只会比周围的人更值钱。

人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。

35岁中年危机大多是因为被短期的利益牵着走,过早压榨掉了价值,如果能一开始就树立一个正确的长远的职业规划。35岁后的你只会比周围的人更值钱。

  • 24
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
惠尔谱WML7001BC是一款先进的电子产品,以下是对该产品说明书的简要回答。 该说明书提供了有关惠尔谱WML7001BC的详细信息,包括其功能、操作指南、技术规格和安全提示。首先,该产品是一款智能通讯设备,具有多种实用功能。它支持蓝牙连接,可以与其他设备进行无线通信,通过连接手机或其他智能设备,用户可以实现信息传输、文件共享和远程控制等功能。 操作指南部分详细介绍了该产品的使用方法。用户可以了解到如何打开和关闭设备,如何进行配对和连接,以及如何进行调节和设置等。此外,说明书还提供了一些常见问题的解答,可以帮助用户解决一些基本的操作问题。 技术规格部分列出了该产品的主要技术参数,包括电池容量、工作电流、蓝牙版本等。同时,还介绍了设备的外观尺寸和重量,以及充电方式和充电时间等重要信息。这些参数可以帮助用户更好地了解产品的性能和特点,以便在使用过程中做出合适的选择。 安全提示部分提供了使用该产品时需要注意的事项。例如,如何正确使用电源适配器和电池,以及避免将设备暴露在高温或潮湿的环境中。此外,还提醒用户注意电池的充电安全,避免过度充电或使用过程中出现异常情况。 总之,惠尔谱WML7001BC说明书提供了对该产品全面的介绍,可以帮助用户更好地了解和使用该设备。通过仔细阅读和参考该说明书,用户可以更好地掌握设备的使用方法和相关注意事项,提高使用体验和使用安全。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值