最近发现中国移动有个wap2.0测试,即测试你的浏览器是否能打开移动梦网wap2.0网站,不知道的可以google一下cmcc wap2.0 test。用Android手机试了下,当点击测试链接的时候会出现无法解析网页的情况,然后用同事Iphone试试,也不行。奇怪了,我们知道android 和 iphone都是用的webkit的引擎,难道webkit有这么搓,连个wap2.0都没搞定。

网上有说是wml没开启,好吧,于是照着大神的指导,将webkit封存的wml代码开启,加入编译系统,前后各种调试做了2天,终于成功编译得到libwebcore.so,果断push进机器,打开测试,还是不行。。。顿时肉牛满面。

静下心来,决定潜心研究下wap2.0为何物。这有个很好的网站分享之

http://www.developershome.com/wap/xhtmlmp/xhtml_mp_tutorial.asp?page=mimeTypesFileExtension

wap2.0 用的语言是XHTML MP,XHTML MP是XHTML的子集,在XHTML MP出现之前,WAP网站的开发者们只能用WML和WML script来创建WAP的网站。而与此同时,web的开发者们却在用强大得多的HTML、CSS、XHTML等来进行传统网站的开发。所以XHTML MP的目标就是浏览者在WAP和web上获得尽可能相似的浏览体验。

好吧,我承认上段是维基百科copy下来的

再看看XHTML MP 处理的MIME类型

The following three MIME types can be used for XHTML MP documents:

application/vnd.wap.xhtml+xml

application/xhtml+xml

text/html xhtml跟html类似,但语法上更加严格。相比之下html语法就显得比较松散,对网页编写者来说,比较方便,但对于机器来说,语言的

语法越松散,处理起来就越困难。

就是说XHTML MP可以加载以上3种类型的网页。

在看了下webkit的代码,都有支持啊,也就是说webkit是支持XHTML MP的,那这样为什么还过不了CMCC的测试,CMCC有这么牛逼?

偶然用同事诺基亚测试,竟然可以通过,这是神马情况。。

偶然又看到网上说CMCC的网页代码本身又不是严格按照W3C标准来的, 导致在解析的时候出现了语法错误提示。神马意思?难道是网页打开的时候加载的MIME类型是application/xhtml+xml,但它本身代码语法却没达到这个标准。于是决定把它降降级,将上面2种

application/vnd.wap.xhtml+xml

application/xhtml+xml 网页全部转

text/html处理

于是在webkit 目录下grep -R “vnd.wap.xhtml+xml' ./*

发现在external/webkit/Source/WebCore/dom/DOMImplementation.cpp有处理的代码 PassRefPtr DOMImplementation::createDocument(const String& type, Frame* frame, const KURL& url, bool inViewSourceMode)

{

if (inViewSourceMode)

return HTMLViewSourceDocument::create(frame, url, type);

// Plugins cannot take HTML and XHTML from us, and we don't even need to initialize the plugin database for those.

if (type == "text/html")

return HTMLDocument::create(frame, url);

if (type == "application/xhtml+xml"

#if ENABLE(XHTMLMP)

|| type == "application/vnd.wap.xhtml+xml"

#endif

)

return Document::createXHTML(frame, url);

。。。。。。

}

将application/vnd.wap.xhtml+xml 和application/xhtml+xml改为跟text/html一样

PassRefPtr DOMImplementation::createDocument(const String& type, Frame* frame, const KURL& url, bool inViewSourceMode)

{

if (inViewSourceMode)

return HTMLViewSourceDocument::create(frame, url, type);

// Plugins cannot take HTML and XHTML from us, and we don't even need to initialize the plugin database for those.

if (type == "text/html")

return HTMLDocument::create(frame, url);

if (type == "application/xhtml+xml"

#if ENABLE(XHTMLMP)

|| type == "application/vnd.wap.xhtml+xml"

#endif

)

//return Document::createXHTML(frame, url);

return HTMLDocument::create(frame, url);

。。。。。

}

然后编译webkit,push进去libwebcore.so

再打开测试页面,bingo通过啦。。

ok收工

android 过滤cmcc,Android 无法通过cmcc wap2.0 test解决相关推荐

  1. android过滤数字,android – GPS卫星数量和位置过滤

    根据可用的位置字段,浮动精度似乎是确定GPS位置有多好的主要字段,而不考虑时间戳.我想知道从NMEA数据(我认为是$GPGGA)或通过LocationManager.getGpsStatus解析卫星数 ...

  2. android 过滤格式,android Intent.setType() 过滤图片,返回所有的文件类型

    处理方法 id.os.Bundle; public class StackOverflowAppActivity extends Activity { private final int PICK_I ...

  3. android 来电过滤,Call Screening(来电过滤) on Android N

    之前在看Android官方文档系统的时候看到Android N 一系列新增和改变的特性,因为工作中负责的部分和通话有关,就尤其注意到了这个Call Screening. 下面来简单介绍一下Call S ...

  4. 匹配表情emoji 正则_详解Android过滤emoji表情正则表达式

    做了一些信息提交的操作,输入了Emoji表情时,后台数据库无法存储 原因:UTF-8编码有可能是两个.三个.四个字节.Emoji表情是4个字节,而Mysql的utf8编码最多3个字节,所以数据插不进去 ...

  5. android 测试工具,Android开源项目第四篇:开发及测试工具篇

    本文为那些不错的Android开源项目第四篇--开发工具篇,**主要介绍Android开发工具和测试工具相关的开源项目**. Android开源项目系列汇总已完成,包括: 1.Buck faceboo ...

  6. android 回退 activity,Android Activity要点(2)

    一.带返回值的Activity回退过程 一般情况下,我们要从当前Activity跳转到另一个Activity,采用的方法是通过startActivity(Intent)来携带数据并实现跳转 有时候又需 ...

  7. android h5 书,android与H5交互

    1 - WebView基本配置 2 -WebView和H5的交互 3 - WebView错误页面处理 4 -WebView中的Cookie操作 5 -WebView漏洞 6 -WebView内存泄漏问 ...

  8. android core log,Android 日志系统(Logcat)的实现分析

    这篇说一下Android 日志系统的实现: 1. Android中的打印分为4个缓冲区和6个打印等级,在frameworks\base\core\java\android\util\Log.java中 ...

  9. android drawable 比例,Android中的Drawable基础与自定义Drawable

    转载请注明链接:http://blog..net/feather_wch/article/details/79124608 本文要点: 1. 介绍Android中Drawable的相关知识点,并且介绍 ...

最新文章

  1. [评测] 联想 Mirage Solo 一体机:基本性能强大,价格定位很迷
  2. vlc延时处理-跳帧
  3. 省AK赛——J - Happy Great BG
  4. php opcache 坑,PHP7 opcache缓存清理问题
  5. Spring Boot 2动态修改日志级别
  6. JVM PrintGCDetails打印GC细节
  7. 减少C++代码编译时间的方法
  8. java 可见_Java可见性机制的原理
  9. 基于JAVA+SpringBoot+Mybatis+MYSQL的垃圾分类管理系统
  10. 三相同步电机怎么接线图_三相异步电机的正反转原理图解
  11. 实现自动发送QQ消息的简单vbs小程序
  12. matlab受力分析,基于Matlab的多支座蒸压釜的受力分析和强度计算
  13. python打印星号组成的三角形_Python利用for循环打印星号三角形的案例
  14. 二十八条改善 ASP 性能和外观的技巧
  15. 智能对话系统:Unit对话API
  16. Logcat的操作使用方法
  17. Tiled-免费2D游戏场景Tile编辑器
  18. 计算机网络之简单概念
  19. 程序员的奋斗史(四十六)——大学断代史(十)——给学弟学妹们的忠告——终结篇
  20. JSON学习一(基础)

热门文章

  1. 强化学习中的调参经验与编程技巧(on policy篇)
  2. ICML 2020 | Google提出最强生成式摘要预训练模型——天马
  3. 将“softmax+交叉熵”推广到多标签分类问题
  4. 计算未来轻沙龙 | 顶会论文相继放榜,NLP领域有哪些最新进展?
  5. Call for Papers | 2019 年 IEEE 国际进化计算大会
  6. Wasserstein距离在生成模型中的应用
  7. 2018 ACM-ICPC亚洲区域赛 北京赛区
  8. r语言x c(-1 -2),【软件】R语言入门之向量
  9. 刚构桥的优缺点_连续刚构桥相对于连续梁来说有优点吗
  10. java: 找不到符号 符号: 方法 setOperation(java.lang.String) 位置: 类型为.......