UIWebView 與JS交互,JSContext注入時(shí)機(jī)

我們做WbeView與js交互,很多時(shí)候是使用JavaScriptCore來(lái)進(jìn)行操作,但是使用JavaScriptCore,有時(shí)候方法注入時(shí)機(jī)不對(duì),可能會(huì)導(dǎo)致無(wú)法正確調(diào)用。
比如在html頁(yè)面剛剛加載的時(shí)候js需要調(diào)用OC的某個(gè)方法,有時(shí)候?qū)⒎椒ㄗ?cè)寫在-(void)webViewDidStartLoad:(UIWebView *)webView中可能會(huì)無(wú)法正常調(diào)用到。
解決辦法:
創(chuàng)建一個(gè)NSObject的Category 命名為"NSObject+JSAdditional"
添加方法

- (void)webView:(id)unuse didCreateJavaScriptContext:(JSContext *)ctx forFrame:(id)frame {
    [[NSNotificationCenter defaultCenter] postNotificationName:kWebviewCreateContext object:ctx];
}

在PrefixHeader中添加引用“NSObject+JSAdditional.h”
WebView所在的ViewController中添加監(jiān)聽(tīng)kWebviewCreateContext的方法
最后在監(jiān)聽(tīng)方法中添加要注入的方法,這樣無(wú)論在WebView加載html的任何時(shí)機(jī)js都可以正常調(diào)用OC方法。

-(void)addContextFuncs:(NSNotification *)noti{
    JSContext *context = noti.object;
    self.context = context;
    [self setWebViewContext]; //設(shè)置需要注入的WebViewContext
}

整個(gè)過(guò)程就是在UIWebView創(chuàng)建了JSContext之后會(huì)發(fā)出一個(gè)通知,接收到通知后立即注入OC方法,而UIWebView的代理方法最早也是要在網(wǎng)頁(yè)開(kāi)始加載的時(shí)候才去注入,可能注入時(shí)機(jī)就稍稍晚一些

有哪里表達(dá)不準(zhǔn)確希望大神指正

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、簡(jiǎn)介 近兩年隨著HTML5的迅速發(fā)展與日趨成熟,越來(lái)越多的移動(dòng)開(kāi)發(fā)者選擇使用HTML5來(lái)進(jìn)行混合開(kāi)發(fā),不僅節(jié)約...
    RainyGY閱讀 2,009評(píng)論 1 12
  • 隨著H5技術(shù)的興起,在iOS開(kāi)發(fā)過(guò)程中,難免會(huì)遇到原生應(yīng)用需要和H5頁(yè)面交互的問(wèn)題。其中會(huì)涉及方法調(diào)用及參數(shù)傳值等...
    Chris_js閱讀 3,245評(píng)論 1 8
  • 前言 關(guān)于UIWebView的介紹,相信看過(guò)上文的小伙伴們,已經(jīng)大概清楚了吧,如果有問(wèn)題,歡迎提問(wèn)。 本文是本系列...
    CoderLF閱讀 9,366評(píng)論 2 12
  • 前言 Web 頁(yè)面中的 JS 與 iOS Native 如何交互是每個(gè) iOS 猿必須掌握的技能。而說(shuō)到 Nati...
    幽城88閱讀 2,342評(píng)論 1 8
  • 簡(jiǎn)書上的雞湯文越來(lái)越多,最近反倒頻繁看到一大批教導(dǎo)女孩,不要在最年輕的時(shí)候活的最差勁。 其實(shí)25歲的...
    Veronicag閱讀 454評(píng)論 0 0

友情鏈接更多精彩內(nèi)容