WKWebView 在 iOS8 下的坑

WKWebView 在 iOS8 下的坑

WKWebView屬于WebKit捌年,是 apple 在 iOS8 上給開(kāi)發(fā)者提供的新的 web 內(nèi)容展示控件飒泻。根據(jù)官方測(cè)試灰伟,其各項(xiàng)性能都比傳統(tǒng)的 UIWebView 強(qiáng)上數(shù)倍恶守。但實(shí)際使用下來(lái)磁奖,其在 iOS8 上充其量算是個(gè)半成品北启,完全不具備替代 UIWebView 的實(shí)力卜朗。究其原因拔第,有以下幾個(gè)方面...


背景描述

  • 項(xiàng)目中需要展示包含大量數(shù)學(xué)公式的頁(yè)面,經(jīng)過(guò)調(diào)研场钉,最后決定以 HTML 頁(yè)面的形式展示蚊俺,數(shù)學(xué)公式的渲染交給 JS 庫(kù) MathJax 來(lái)完成

  • 具體方式為

    本地事先寫(xiě)好的 HTML 模版 
    +
    從 server 端后去所需展示的內(nèi)容
    +
    調(diào)用同樣在本地的 JavaScript 函數(shù)將數(shù)據(jù)填充置`<body>`內(nèi)
    +
    調(diào)用從網(wǎng)絡(luò)獲取的 MathJax 函數(shù),進(jìn)行渲染
    
  • 除了JS部分比較費(fèi)勁之外??逛万,很快泳猬,一個(gè)基于WKWebView的數(shù)學(xué)展示控件基本成型,在 iOS9 中測(cè)試一切OK??宇植,切換至 iOS8 測(cè)試得封,噩夢(mèng)開(kāi)始了????

無(wú)法加載本地資源

  • 假設(shè)現(xiàn)在有本地 HTML 文件:localHTML.html,其中引用了一個(gè)本地 JS 文件:localJS.js指郁;一個(gè)本地 css 文件:localCSS.css忙上,你會(huì)發(fā)現(xiàn)在 iOS9 下加載一切正常的文件們?cè)?iOS8 下統(tǒng)統(tǒng)找不到,具體表現(xiàn)為打開(kāi) safari 進(jìn)行調(diào)試(不知道如何利用 safari 調(diào)試 iOS 上 web 內(nèi)容的看這里)闲坎,本地文件全部為紅色疫粥,表示無(wú)法加載
  • 最初,我以為是目錄結(jié)構(gòu)的問(wèn)題腰懂,各種嘗試梗逮,但一直無(wú)果。被這個(gè)問(wèn)題卡了2天加一個(gè)周末后绣溜,我看到了爆棧上的一個(gè)問(wèn)答慷彤,我放棄了??,決定將除了 HTML 之外的所有文件都存放在 server怖喻,以為這樣就萬(wàn)事大吉了底哗,但沒(méi)想到自己還是 too young too naive??

在 HTML 中設(shè)置 meta charset="utf-8" 無(wú)效

  • 我們都知道,如果在 HTML 的 <head> 標(biāo)簽中設(shè)置utf-8锚沸,表示這個(gè)文件及其所引用的所有文件都以utf-8的編碼形式打開(kāi)艘虎,例如:

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8">
        <title>This is a text</title>
      </head>
      <body>
      ...
      </body>
    </html>
    
  • 然后,當(dāng)我把所有本地文件都移動(dòng)至 server咒吐,高高興興??的開(kāi)始測(cè)試的時(shí)候野建,發(fā)現(xiàn)無(wú)法渲染數(shù)學(xué)公式,打開(kāi) safari 調(diào)試恬叹,發(fā)現(xiàn)所有的 js / css候生,都變成了亂碼,可是iOS9 上還是正常的U乐纭Nㄑ肌!9枞贰D扛取明肮!,簡(jiǎn)直是晴天霹靂缭付,我頓時(shí)又懵逼了??

  • 在自學(xué)了半天 css 之后柿估,我決定每次在 HTML 中引用其他文件時(shí),都在后面加上utf-8陷猫,例如:

    <link type="text/css" rel="stylesheet" href="lounge.css" charset="utf-8">
    
  • 果然本我修復(fù)了大半秫舌,注意這里是大半,不是完全绣檬,因?yàn)槲矣职l(fā)現(xiàn)這些被引用的文件在引用其他文件時(shí)也會(huì)是亂碼足陨,例如 MathJax 引用自己的其他文件時(shí),我再次進(jìn)入懵逼狀態(tài)????


無(wú)法使用 NSURLProtocol 攔截請(qǐng)求

  • 基于上面的兩點(diǎn)娇未,我徹底放棄了 WKWebView墨缘,我很不服氣,自己先是被 JS 玩得不要不要的零抬, 然后又被 apple 玩的不要不要的飒房,但是又有什么辦法呢,生活還要繼續(xù)不是嗎媚值???
  • 至于無(wú)法使用 NSURLProtocol 攔截請(qǐng)求,我還沒(méi)有親自嘗試护糖,據(jù)說(shuō)是因?yàn)?code>WKWebView是在其他進(jìn)程去做請(qǐng)求褥芒,而非當(dāng)前進(jìn)程(參考
  • 這點(diǎn)相當(dāng)糟糕,要知道 NSURLProtocol 絕對(duì)是個(gè)大殺器

樣式同 UIWebView 有較大差距

  • 同一個(gè) css嫡良,在 UIWebView 和 WKWebView 上形式有很大區(qū)別锰扶,而恰恰安卓的樣式同前者基本一致,試想以下你需要為 android 和 iOS 寫(xiě)兩個(gè)不同的 css 文件寝受,蛋碎??
  • 而且坷牛,根據(jù)我的實(shí)驗(yàn),有時(shí)對(duì) css 的修改 WKWebView 還不買(mǎi)賬很澄,具體原因不詳

總結(jié)

一句話總結(jié):貌似 apple 是不會(huì)修復(fù) WKWebView 在 iOS8 上的這些 bug 了京闰,所以我們就等吧,等到 iOS8 用戶(hù)幾乎沒(méi)有甩苛,app 最低支持 iOS9 的時(shí)候蹂楣,再去用它

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市讯蒲,隨后出現(xiàn)的幾起案子痊土,更是在濱河造成了極大的恐慌,老刑警劉巖墨林,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赁酝,死亡現(xiàn)場(chǎng)離奇詭異犯祠,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)酌呆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)衡载,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人肪笋,你說(shuō)我怎么就攤上這事月劈。” “怎么了藤乙?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵猜揪,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我坛梁,道長(zhǎng)而姐,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任划咐,我火速辦了婚禮拴念,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘褐缠。我一直安慰自己政鼠,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布队魏。 她就那樣靜靜地躺著公般,像睡著了一般。 火紅的嫁衣襯著肌膚如雪胡桨。 梳的紋絲不亂的頭發(fā)上官帘,一...
    開(kāi)封第一講書(shū)人閱讀 49,079評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音昧谊,去河邊找鬼刽虹。 笑死,一個(gè)胖子當(dāng)著我的面吹牛呢诬,可吹牛的內(nèi)容都是我干的涌哲。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼尚镰,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼膛虫!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起钓猬,我...
    開(kāi)封第一講書(shū)人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤稍刀,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體账月,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡综膀,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了局齿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片剧劝。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖抓歼,靈堂內(nèi)的尸體忽然破棺而出讥此,到底是詐尸還是另有隱情,我是刑警寧澤谣妻,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布萄喳,位于F島的核電站,受9級(jí)特大地震影響蹋半,放射性物質(zhì)發(fā)生泄漏他巨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一减江、第九天 我趴在偏房一處隱蔽的房頂上張望染突。 院中可真熱鬧,春花似錦辈灼、人聲如沸份企。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)司志。三九已至,卻和暖如春榕莺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背棵介。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工钉鸯, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人邮辽。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓唠雕,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親吨述。 傳聞我的和親對(duì)象是個(gè)殘疾皇子岩睁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • UIWebView 之痛 開(kāi)發(fā)App的過(guò)程中,常常會(huì)遇到在App內(nèi)部加載網(wǎng)頁(yè)揣云,通常用UIWebView加載捕儒。而這個(gè)...
    zyl04401閱讀 16,016評(píng)論 46 157
  • 轉(zhuǎn)載自: http://www.reibang.com/p/90a90bd13aac WKWebView從入門(mén)到趟...
    F麥子閱讀 652評(píng)論 0 3
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,029評(píng)論 4 62
  • UIWebView 之痛 開(kāi)發(fā)App的過(guò)程中刘莹,常常會(huì)遇到在App內(nèi)部加載網(wǎng)頁(yè)阎毅,通常用UIWebView加載。而這個(gè)...
    Style_mao閱讀 1,422評(píng)論 1 5
  • 從今年下半年開(kāi)始点弯,原容桂實(shí)驗(yàn)學(xué)校由順德一中教育集團(tuán)正式托管扇调,我們從此與順德一中結(jié)緣。今年的開(kāi)學(xué)跟往屆有了很多不同抢肛,...
    小雨sunny閱讀 201評(píng)論 0 0