iOS奇淫技巧 —— 解決UIWebView重定向后,JSContext 注入的模型丟失問題

問題:UIWebview重定向后,JSContext 注入的模型丟失問題
現(xiàn)象:js無法調起原生

我遇到這個問題之后,也是谷歌百度了很久很久欢嘿。

github 找到一個開源項目
UIWebViewTS_JavaScriptContet
拉下來之后,只需要這樣就解決問題了

58E3AD82-B82E-4AE6-AE0F-3383B08F5C56.png

然后,有循環(huán)引用楷怒?
行,那這樣好了瓦灶,注入模型
8F657EFC-C0C1-498F-BA81-9089E6428D53.png

ok鸠删,現(xiàn)在來簡單分析一下是如何解決這個問題的。

其中贼陶,最關鍵的是一個回調方法didCreateJavaScriptContext
作者通過 runtime 機制刃泡,巧妙地在 JavaScriptContext 創(chuàng)建之后,生成回調碉怔。然后在回調中我們注入 mode烘贴,使其生效。重定向之后撮胧,重新生成context后再次回調這個方法桨踪,重新注入 mode,重新生效芹啥。

詳細各位可以看 UIWebViewTS_JavaScriptContet 中 UIWebView+TS_JavaScriptContext.m 源碼

當我以為完美地解決了這個問題時锻离,才發(fā)現(xiàn)這是一個坑啊叁征!

他用了私有API纳账,已有不少朋友深受其害。捺疼。疏虫。

AFA0A099-9C89-449B-9B0C-92BDFEDC630A.png

當我無計可施的時候,在一個不起眼的答案中找到了解決思路,也正是本文要說的奇淫技巧卧秘。呢袱。

http://stackoverflow.com/questions/22714373/easyjswebview-breaks-when-reloading-the-webview

作者提出的是 EasyJSWebView 的一個崩潰問題

3edc3db9116df2911342d4919df01708.png

6687FE24-1144-491F-8DCD-73973AB87324.png

網友給出的解決辦法是將原來的UIWebView移除,重新生成一個UIWebView替換掉

針對我的問題翅敌,本著試一試的想法寫出了如下代碼:


1BE8AE9C-47F1-4883-8BC5-F6A3A33FBACF.png

重新生成了一個 UIWebView 結果問題解決了羞福!

有個缺點就是,沒有了歷史記錄蚯涮,不能使用 back 了治专!需要手動處理 返回,而且沒有緩存了遭顶。

對于我們的業(yè)務张峰,這些問題都還不算問題,所以也算是一個可以采用的解決方式棒旗。

分析

為什么我重新創(chuàng)建一個 UIWebView 再注入模型就可以了呢喘批??

網上看到一位coder的猜測

  • H5 一級頁面的時候铣揉,是 webView 第一次創(chuàng)建饶深,在 webView loadRequest 之前,內存已經 creat JavaScriptContext逛拱,也就說 在 UIWebViewDelegate 回調發(fā)生之前敌厘。
  • 而跳轉到二級頁面,頁面只是 再次 回調 UIWebViewDelegate 橘券,這個時候额湘,JavaScriptContext creat時機可能會晚于 - (BOOL)webView: shouldStartLoadWithRequest:navigationType: 也就是說回調發(fā)生的時候,新的 JavaScriptContext還未創(chuàng)建旁舰。

問題的關鍵是,我們注入模型的時機必須在創(chuàng)建 JavaScriptContext 與 JS調用 之間嗡官。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末箭窜,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子衍腥,更是在濱河造成了極大的恐慌磺樱,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,002評論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件婆咸,死亡現(xiàn)場離奇詭異竹捉,居然都是意外死亡,警方通過查閱死者的電腦和手機尚骄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評論 3 400
  • 文/潘曉璐 我一進店門块差,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事憨闰∽次希” “怎么了?”我有些...
    開封第一講書人閱讀 169,787評論 0 365
  • 文/不壞的土叔 我叫張陵鹉动,是天一觀的道長轧坎。 經常有香客問我,道長泽示,這世上最難降的妖魔是什么缸血? 我笑而不...
    開封第一講書人閱讀 60,237評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮械筛,結果婚禮上捎泻,老公的妹妹穿的比我還像新娘。我一直安慰自己变姨,他們只是感情好族扰,可當我...
    茶點故事閱讀 69,237評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著定欧,像睡著了一般渔呵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上砍鸠,一...
    開封第一講書人閱讀 52,821評論 1 314
  • 那天扩氢,我揣著相機與錄音,去河邊找鬼爷辱。 笑死录豺,一個胖子當著我的面吹牛,可吹牛的內容都是我干的饭弓。 我是一名探鬼主播双饥,決...
    沈念sama閱讀 41,236評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼弟断!你這毒婦竟也來了咏花?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 40,196評論 0 277
  • 序言:老撾萬榮一對情侶失蹤阀趴,失蹤者是張志新(化名)和其女友劉穎昏翰,沒想到半個月后,有當地人在樹林里發(fā)現(xiàn)了一具尸體刘急,經...
    沈念sama閱讀 46,716評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡棚菊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,794評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了叔汁。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片统求。...
    茶點故事閱讀 40,928評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡检碗,死狀恐怖,靈堂內的尸體忽然破棺而出球订,到底是詐尸還是另有隱情后裸,我是刑警寧澤,帶...
    沈念sama閱讀 36,583評論 5 351
  • 正文 年R本政府宣布冒滩,位于F島的核電站微驶,受9級特大地震影響,放射性物質發(fā)生泄漏开睡。R本人自食惡果不足惜因苹,卻給世界環(huán)境...
    茶點故事閱讀 42,264評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望篇恒。 院中可真熱鬧扶檐,春花似錦、人聲如沸胁艰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,755評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽腾么。三九已至奈梳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間解虱,已是汗流浹背攘须。 一陣腳步聲響...
    開封第一講書人閱讀 33,869評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留殴泰,地道東北人于宙。 一個月前我還...
    沈念sama閱讀 49,378評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像悍汛,于是被迫代替她去往敵國和親捞魁。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,937評論 2 361

推薦閱讀更多精彩內容

  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫离咐、插件署驻、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,126評論 4 61
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,344評論 25 707
  • 前言 關于UIWebView的介紹,相信看過上文的小伙伴們健霹,已經大概清楚了吧,如果有問題瓶蚂,歡迎提問糖埋。 本文是本系列...
    CoderLF閱讀 8,975評論 2 12
  • “我們的起跑線肯定是不同的,但是我讓你100米窃这,我還是有可能得冠軍的瞳别。” 朱國營說他在求學過程中特別是高三在身體和...
    心靈育兒媽媽閱讀 361評論 0 0
  • 在瞭望無際的新疆,有碧藍無垠而不失干凈的天空祟敛,有嫩白如初而不失情調的雪山疤坝,有地道淳樸而不失風韻的鄉(xiāng)土風情,更有穿著...
    化骨真人閱讀 322評論 0 1