UIWebview關(guān)于JSContext所遇到的問題

iOS7以后,蘋果加入了JSContext來處理JavaScript誉碴,實(shí)現(xiàn)h5頁面和原生的交互蜘澜。之前項(xiàng)目中經(jīng)常會用到JSContext,也遇到了很多問題,現(xiàn)在剛好有時(shí)間慨飘,把遇到的問題正好記錄下來确憨。

一.JSContext循環(huán)引用導(dǎo)致不釋放的問題

1.1 遇到的問題

self.jsContext = [_webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
self.jsContext[@"app"] = weakSelf;
self.jsContext.exceptionHandler = ^(JSContext *context, JSValue *exceptionValue) {
    context.exception = exceptionValue;
    NSLog(@"異常信息:%@", exceptionValue);
};

如上代碼所示,JSContext引用了self,self又引用了JSContext瓤的,彼此等待對方造成了循環(huán)引用的問題休弃,盡管使用了weakSelf,還是不會解除這種狀態(tài)。

1.2 解決方法

本人是通過創(chuàng)建一個(gè)中間對象來實(shí)現(xiàn)的圈膏,代碼如下:

    self.jsContext = [_webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
    self.jsContext[@"app"] = _weakWebJSExportDelegate;
    self.jsContext.exceptionHandler = ^(JSContext *context, JSValue *exceptionValue) {
        context.exception = exceptionValue;
        NSLog(@"異常信息:%@", exceptionValue);
    };

_weakWebJSExportDelegate的創(chuàng)建方法,在viewDidLoad創(chuàng)建

_weakWebJSExportDelegate = [[WeakWebJSExportDelegate alloc] initWithDelegate:self];

WeakWebJSExportDelegate的實(shí)現(xiàn)


454FB2D1-14DC-4761-962C-F1935D150A92.png

如上圖所示,BTNVSetTitle是h5調(diào)用app的方法塔猾,引入Back2ObjcDelegate是為了讓該方法的執(zhí)行還是在webview里面實(shí)現(xiàn)。

二.UIWebview調(diào)用reload導(dǎo)致JSContext失效的問題

2.1 遇到的問題

當(dāng)頁面刷新或者跳轉(zhuǎn)新頁面稽坤,shouldStartLoadWith與webViewDidStartLoad獲取的均為上一個(gè)頁面的JSContext丈甸。而webviewDisFinishLoad觸發(fā)的時(shí)候糯俗,獲取雖然是正確的JSContext,但是此時(shí)頁面已經(jīng)加載完畢睦擂,js方法已經(jīng)調(diào)用完了得湘,獲取到正確的值也沒用了,所以就導(dǎo)致了JSContext失效的問題顿仇。

2.2 解決方法

需要刷新的時(shí)候重新創(chuàng)建一個(gè)webview淘正,同時(shí)刪掉老的webview,這樣新的webview獲取JSContext的時(shí)候不會獲取到老的臼闻,那么正確的JSContext就能正確設(shè)置JS對象鸿吆。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市述呐,隨后出現(xiàn)的幾起案子惩淳,更是在濱河造成了極大的恐慌,老刑警劉巖市埋,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件黎泣,死亡現(xiàn)場離奇詭異,居然都是意外死亡缤谎,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門褐着,熙熙樓的掌柜王于貴愁眉苦臉地迎上來坷澡,“玉大人,你說我怎么就攤上這事含蓉∑盗玻” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵馅扣,是天一觀的道長斟赚。 經(jīng)常有香客問我,道長差油,這世上最難降的妖魔是什么拗军? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮蓄喇,結(jié)果婚禮上发侵,老公的妹妹穿的比我還像新娘。我一直安慰自己妆偏,他們只是感情好刃鳄,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著钱骂,像睡著了一般叔锐。 火紅的嫁衣襯著肌膚如雪挪鹏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天愉烙,我揣著相機(jī)與錄音讨盒,去河邊找鬼。 笑死齿梁,一個(gè)胖子當(dāng)著我的面吹牛催植,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播勺择,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼创南,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了省核?” 一聲冷哼從身側(cè)響起稿辙,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎气忠,沒想到半個(gè)月后邻储,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡旧噪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年吨娜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片淘钟。...
    茶點(diǎn)故事閱讀 38,622評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡宦赠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出米母,到底是詐尸還是另有隱情勾扭,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布铁瞒,位于F島的核電站妙色,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏慧耍。R本人自食惡果不足惜身辨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蜂绎。 院中可真熱鬧栅表,春花似錦、人聲如沸师枣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至洗贰,卻和暖如春找岖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背敛滋。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工许布, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人绎晃。 一個(gè)月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓蜜唾,卻偏偏與公主長得像,于是被迫代替她去往敵國和親庶艾。 傳聞我的和親對象是個(gè)殘疾皇子袁余,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評論 2 348

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,756評論 25 707
  • 隨著H5技術(shù)的興起,在iOS開發(fā)過程中咱揍,難免會遇到原生應(yīng)用需要和H5頁面交互的問題颖榜。其中會涉及方法調(diào)用及參數(shù)傳值等...
    Chris_js閱讀 3,062評論 1 8
  • JavaScriptCore框架主要是用來實(shí)現(xiàn)iOS與H5的交互。由于現(xiàn)在混合編程越來越多煤裙,H5的相對講多掩完,所以研...
    水靈芳蕥閱讀 1,389評論 1 8
  • 方法1.UIButton *button = [[UIButton alloc] initWithFrame:fr...
    _DN閱讀 1,412評論 1 1
  • 這部影片是由美國《波士頓環(huán)球報(bào)》中一個(gè)名為“聚焦”的欄目組于2002年發(fā)表的一系列關(guān)于神職人員猥褻兒童事件的...
    青稞餅干閱讀 904評論 0 6