轉自https://www.qianduan.net/qqliu-lan-qi-x5nei-he-wen-ti-hui-zong/
常常被人問及微信中使用的X5內核的問題,其實我也不是很清楚,只知道它是基于android 4.2的webkit,版本號是webkit 534。今天正好從X5團隊拿到了一份問題匯總,梳理下發出來,給各位開發者以參考——不排除明天會刪除這篇文章的可能。
1.Android WebView常見問題及解決方案匯總:
http://blog.csdn.net/t12x3456/article/details/13769731
2.請問各位碰到過X5瀏覽器內,局部滑動使用iscroll卡頓的問題么?
回答:是使用 iscroll.js 這個JS去滾動么?如果只是為了產生滾動,建議使用 overflow 屬性來,目前有一種滾動優化在線上版本效率不是太好,通過JS去改變CSS的屬性產生滾動
3.調用:-webkit-filter: blur(10px);filter: blur(10px);
在Android下 背景圖沒有blur掉,只是被單純的放大而已
回答:-webkit-filter
目前還不支持,可以先用圖片替換的方式 后續版本會支持這個屬性
4.shadowBlur是陰影效果吧,我們是想實現圖片毛玻璃
回答: http://blog.csdn.net/jia20003/article/details/9195915 這個有用么
5.LBS相關,定位頻繁失敗
第一步,首先確認定位失敗是個別站點原因還是所有站點定位都失敗。如果是所有站點定位都不成功,很有可能是內核問題,轉內核相關同學跟進調查定位邏輯是否有缺陷;如果是某個站點才會出現的問題,繼續第二步排查,從站點源碼著手。
第二步,找到站點請求定位的js代碼段,檢查獲取定位信息函數的options字段,很有可能是 options 中 timeout 字段設置的超時太短導致,建議前端開發將該字段時間設置長一些(建議10s以上)或者不設置該字段。如果js沒有設置 timeout 字段的情況下仍然定位不成功,則轉內核同學調查內核流程。
ps:H5獲取LBS信息的js接口
回答:
navigator.geolocation.getCurrentPosition(showPosition,showError,{
enableHighAccuracy:false,
timeout:10*1000,
maximumAge:0
});
navigator.geolocation.watchPosition(watchPosition,showError,options);
showPosition:定位成功時回調;
showError:定位出錯時回調;
options:可選的地理定位請求特征
enableHightAccuracy:可選,是否開啟高精度模式,參數默認值為 false
timeout:可選,單位為ms,瀏覽器需要在該時間段內完成定位,否則定位失敗,默認值為 - - infinity,無窮大。如果該值設置較小,會有很高的定位失敗率。
maximumAge:可選,單位ms,重新計算位置的時間間隔。默認為0,即每次時時計算位置信息。
6.打開視頻播放,后退視頻仍然在播放
回答:部分機型,瀏覽頁面時打開視頻播放,點擊返回,頁面上的視頻仍然在播放。解決辦法是捕獲后退事件,主動調用 onHideCustomView() 方法,并且在該方法里將 onShowCustomView 里關聯的view解除關聯
7.請問一下微信瀏覽器的cookie清理機制是怎么樣的?
回答:X5內核是不會清除的。
8.打開WWW頁面,縮放顯示的問題
回答: 使用webview打開www頁面,如果頁面被放大顯示,確定websettings有沒有設置,webSettings.setUseWideViewPort(true
),默認為false,www頁面不會被縮放顯示的。手機QQ瀏覽器默認為true,顯示www頁面更美觀
9.關于滾動時候動畫的問題
回答:
頁面滑動過程中動畫不會被觸發 頁面滑動過程中動畫會被停止 這個是X5內核為了做滾動優化而做的限制
10.關于connection type定義的問題
回答:X5執行的標準比較老,NetworkInfo_API
enum ConnectionType {
UNKNOWN = 0,
ETHERNET = 1,
WIFI = 2,
CELL_2G = 3,
CELL_3G = 4,
CELL_4G = 5,
NONE = 6,
};
11.出現網絡正常,但是頁面打不開的情況
回答:關于設置里面的云加速試下是否可以打開。
12.js阻塞和css阻塞的不同
回答:css是阻塞渲染過程,js阻塞解析過程!對于用戶來說,沒什么區別,都是空白的 js的執行時,如果js中有讀寫css的屬性的代碼,并且下載隊列中有待加載的css,js執行會被阻塞掉。
13.cookie的4k限制
回答:瀏覽器端cookie的數量可能會超過4k,有http請求時,內核只取前4k的cookie數據!
14.Js Defer與把js放到html底部的區別
回答:js defer:先加載,ondownload 后執行。和js放到html底部類似。不同的就是html預掃描到會先加載
15.首屏顯示后,為什么又會重排版
回答:瀏覽器的排版寬度受上層ui設置的webview寬度影響。如果webview沒設置或者是設置成0,瀏覽器內核會用默認的排版寬度320px進行排版。此時若webview的寬度值被正常設置,計算出來的排版寬度不是320px(一般是360px),這樣瀏覽器就要用360px寬度,對頁面進行重排。
16.canvas的數量是不是有限制
回答:
- 小于1G的內存, canvas的內存不能超過100M
- 1G到2G的內存, canvas的內存不能超過300M
- 大于2G的內存 canvas的內存不能超過500M
- 為了防止內存占用過多,硬件加速的CANVAS最多支持5個
小于等于1G內存手機,由于內存沒辦法精確統計,當達到75M以上,CANVAS數量最多支持20個
上面說的canvas內存,僅僅是說canvas 長寬計算出來的內存,不包括canavs使用的圖片等資源內存
17.x5瀏覽器CSS3有些不支持,同樣的樣式,在chrome里能起到效果,在X5就沒用。并且js性能也差的多,微信還內置X5,用起來太不爽
回答:是否方便具體說下是什么樣的性能問題和css樣式缺陷影響到您?我們這邊可以跟進查看下原因。
X5內核也在不斷改進,您的反饋可以幫助我們進一步優化。
chrome在標準的支持和性能優化方面確實目前走在業界前面,不過android系統的碎片化,android系統webview更是碎片化嚴重。
android系統上的web開發可能也需要考慮到不同rom的兼容情況。X5內核致力于為開發者提供統一的web體驗,并通過不斷的優化,來向業界標準對齊。
目前我們也在做基于chromium內核的研究工作,后續在標準的支持和性能上會有進一步提高。
18.請問下x5中js調用android怎么實現?
回答:跟系統內核下一樣,都借助 addjavainterface 實現
19.請問一下,android手機微信上用的x5支持webgl嗎?
回答:android手機中微信上的X5都是支持webgl的,不過部分機型上還有兼容性問題,由于兼容性問題,webgl之前我們是采用軟繪的方式支持,目前切換到了硬繪,但整體來說還是會有兼容性和性能問題,后續這塊還會持續更新
20.如果在某個設備第一次打開應用的時候 沒有網絡,x5內核可以啟動嗎?單網絡恢復后還要再次認證,還是 不用在認證?
回答:第一次打開應用是不會拉起X5的 在第二次打開之后 不管有無網絡都可以拉起
21.如果我不安裝瀏覽器,安裝微信,x5能調用起來嗎?
回答:不能,只能安裝QQ瀏覽器才能調用
22.web audio api是否已經支持?
回答:暫時還不支持
23.什么時候支持html5的onunload和onbeforeunload事件
回答:現在是支持html5的 onunload 和 onbeforeunload 事件的
24.要用X5的內核,必須要用QQ瀏覽器么?
回答:目前 SDK 版本是這樣的,我們正在預研的版本,手機如果安裝了微信或手Q ,其它 app 可以不依賴 QQ瀏覽器 而共享 x5 內核。
25.關于svg問題。
回答:關于SVG的問題:
關于svg模糊的問題,有2種情況:
直接訪問一個.svg url的頁面或者object,embed加入的svg, 出現模糊的問題
此問題已解決, qq瀏覽器5.8上已經修復, tbs下個版本也會修復 svg用作background-image, 模糊這個問題是我們目前渲染機制導致不能兼容非標準寫法: 在用svg作為background-image的時候, 需要指定background-size, 不然會模糊
關于svg支持情況: 在5.3之前的qq瀏覽器不支持svg, 我們會在后臺把svg轉成一張jpeg圖片, 供瀏覽器顯示,5.4及以上版本支持svg,如果遇到被轉成圖片的問題,需要升級瀏覽器版本。
26.請問flexbox近期會支持嗎?
回答:flexbox我們正在做開發支持
27.x5內核 目前是獨立運行的 還是需要安裝QQ瀏覽器?
回答:sdk是需要QQ瀏覽器的,微信手Q里的是不需要的
28.現在X5內核怎么調試?在微信或者手q或者qq瀏覽器中調試頁面
回答:現在的微信手Q里面的X5還無法通過inspector調試 后期我們會把帶有inspector調試的版本掛在開發者后臺下載區 敬請期待
29.請問x5支持webgl的所有接口嗎?能在所有版本的android機(4.0+)和ios機(5.0+)上運行webgl嗎?
回答:webgl目前是支持的,不過部分機型上還有兼容性問題
30.X5上支持哪些擴展?支持多少個紋理單元?
回答:X5上只能支持:
WEBGL_lose_context
EXT_texture_filter_anisotropic
OES_texture_float
OES_standard_derivatives
OES_vertex_array_object
WEBGL_debug_renderer_info
WEBGL_debug_shaders
WEBKIT_WEBGL_compressed_texture_s3tc
而且這些是必須手機GPU有對應的擴展指令才行的。
關于紋理單元。我們這邊沒有限制
上面的擴展,也都是基本每一個對應opengl的一個擴展
支持多少紋理單元,也是從opengl查詢得到的。
主要應該是看手機GPU支持到啥程度,我們是做個對接。
31.x5的文件分片功能解決了嗎,blob = file.webkitSlice(start, stop)
,這樣分片出來的blob用不了啊。
回答:分片問題這邊已經定位處理,瀏覽器會在5.8版本修復
32.手機qq瀏覽器是否有調試工具呢?
回答:有的,Inspector。
33.請問現在微信調用的手機QQ瀏覽器支持websocket 嗎?
回答:支持websocket ,暫不支持wss,不支持webrtc
34.有計劃支持webRTC嗎?
回答:這個我們后續會評估的。
35.我是HTML5游戲開發者,制作中的H5游戲需要有音樂音效。但是我在android機器上使用QQ瀏覽器出現了如下問題:
循環播放BGM時,如果同時播放音效,BGM會被強行暫停 多個音效同時播放時,會出現明顯的無法忍受的延遲和播放失敗 這個問題在同一臺機器的微信上同樣存在,但是同一臺機器的chrome沒有這個問題。
我能想到的最合理的解釋是:X5內核同一時間只能播放一個音頻通道。
希望官方能解答我的疑惑和遇到的問題,謝謝。
PS:
- 使用的H5音頻庫 : SoundJS
- 使用的音頻格式 : mp3
- 使用的Android機型:三星 Note3
回答:播放音效需要獲取聲音輸出焦點,目前只支持同時播放一個音效 您提的需求我們會討論評估后期是否能有方案現
36.播放音效時,為啥會把我后臺的BGM播放給暫停掉?
回答:播放聲音時當前音頻需要獲取 audiofocus ,系統在audiofocus丟失時會通知其它音頻播放軟件,這個暫停應該是播放軟件自身的行為,我們本身并沒有暫停后臺音頻,只是向系統申請了 audiofocus
37.300ms延遲是指什么?click 和 touch ?
回答:touch 點擊之后,到 click 事件被觸發,click 事件有延遲,touch 不存在,用 touchstart 事件替代 click 事件就OK
38.現在微信內置的瀏覽器能支持flexbox么,現在有沒有什么好辦法能夠替代呢?做好的網頁一放到微信上,大量的flex的頁面
回答:你好flexbox正在開發支持,flexbox在android4.1到4.3系統內核上,也有類似問題,頁面是需要兼容的
39.有沒有什么x5內核的論壇或者wiki之類的?可以參考下。
回答:http://bbs.browser.qq.com/ http://x5.tencent.com/ 這兩個論壇可以關注下
另外有我們的公眾賬號 有問題可以隨時交流
40.X5公眾號叫什么?
回答:騰訊X5瀏覽服務
41.手q上面的內核應該也是x5的吧?這樣直接在手q上面的效果和在微信里面應該是一樣的?
回答:是的手Q微信內的webview都是X5。
42.x5不支持font-face嗎?
回答:支持
43.x5 支持flex嗎?有兼容性文檔嗎?
回答:不支持.http://1.h5support.sinaapp.com/incoming/cow.html
這個頁面是參考caniuse的測試用例得到的測試結果,5.7是對應qq瀏覽器5.7版本,可以對比下和系統瀏覽器4.1~.4.4的支持度。有需要的同學可以先參考下,相關的文檔建設我們也在逐步完……
44.iscroll+lazyload在x5瀏覽器里面卡頓很嚴重,有人碰到過類似問題么,小米手機 列表內元素200個左右。
回答:iscroll本身對內核要求比較高,較新的blink版本支持才比較好。可以對比測試下android 4.x 的系統瀏覽器看看。建議還是在前端做些優化,避免較長的元素,并減少動畫效果。http://www.cnblogs.com/vbluebirdv/archive/2012/11/18/2776300.html 可以參考網上一些iscroll調優的文章
45.微信里面緩存問題,在安卓下和 ios下,刷新機制是不是不一樣?
回答:ios因為有刷新功能,點擊之后請求到的都是最新的文件,安卓下,不管怎樣請求都不會更新文件
46.<meta name="x5-orientation" content="portrait"/>
現在微信里面沒有假如這個啊?為什么IOS QQ瀏覽器不識別這個?
回答:ios內核不是X5, ios 瀏覽器后續版本也會支持http://open.mb.qq.com/doc?id=1201 目前ios 瀏覽器僅支持 x5-page-mode
47.現在白鷺游戲引擎是不是內置在x5里面了?
回答:內置了白鷺引擎runtime
48.x5內核不支持 canvas 的 background 屬性嗎?
<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8">
<title>canvas test</title>
<!--<meta HTTP-EQUIV="pragma" CONTENT="no-cache">-->
<!--<meta HTTP-EQUIV="Cache-Control" CONTENT="no-store, must-revalidate">-->
</head>
<body>
<div>
<canvas id="testCanvas" width="500" height="300" style="background: #00FF00;"></canvas>
<!--<canvas id="testCanvas" width="1136" height="640" style="background:#000"></canvas> -->
</div>
</body>
</html>
背景顏色顯示不出來
回答:這個是做了優化,當canvas下蓋了背景,就沒有去繪制背景圖片,當初是因為一些手機的GPu在繪制這塊,如果存在這種情況繪制非常慢
49.qq瀏覽器有沒有準備支持asm.js的計劃?
回答:我們也正在籌備相關工作,會對市面上各種游戲引擎進行全面評測并設計合理的架構方案整合。預計下半年可以推出,敬請期待
50.X5不支持canvas.toDataUrl()
的image/jpeg參數,還是轉成了默認的png格式請問有什么替換方法嗎?
回答:當前確實還不支持...我們在修復
51.問一下 ios版的微信里面是用的系統自帶的UIWebView還是用的qq瀏覽器的內核?
回答:ios版微信里面用的是系統自帶的
文章列表