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

我們做WbeView與js交互,很多時(shí)候是使用JavaScriptCore來進(jìn)行操作,但是使用JavaScriptCore,有時(shí)候方法注入時(shí)機(jī)不對,可能會(huì)導(dǎo)致無法正確調(diào)用。
比如在html頁面剛剛加載的時(shí)候js需要調(diào)用OC的某個(gè)方法,有時(shí)候?qū)⒎椒ㄗ詫懺?code>-(void)webViewDidStartLoad:(UIWebView *)webView中可能會(huì)無法正常調(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)聽kWebviewCreateContext的方法
最后在監(jiān)聽方法中添加要注入的方法,這樣無論在WebView加載html的任何時(shí)機(jī)js都可以正常調(diào)用OC方法。

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

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

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

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

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

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

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