当前位置: 首页 > 工具软件 > SO WAP! > 使用案例 >

android 过滤cmcc,Android 无法通过cmcc wap2.0 test解决

袁雅逸
2023-12-01

最近发现中国移动有个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收工

 类似资料: