android 过滤cmcc,Android 无法通过cmcc wap2.0 test解决
最近發現中國移動有個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解决的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android arrays.xml 二
- 下一篇: android 相机 全功能,一加7系首