UIWebView 與JS交互,JSContext注入時機

我們做WbeView與js交互,很多時候是使用JavaScriptCore來進行操作,但是使用JavaScriptCore,有時候方法注入時機不對,可能會導致無法正確調用。
比如在html頁面剛剛加載的時候js需要調用OC的某個方法,有時候將方法註冊寫在-(void)webViewDidStartLoad:(UIWebView *)webView中可能會無法正常調用到。
解決辦法:
創建一個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中添加監聽kWebviewCreateContext的方法
最後在監聽方法中添加要注入的方法,這樣無論在WebView加載html的任何時機js都可以正常調用OC方法。

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

整個過程就是在UIWebView創建了JSContext之後會發出一個通知,接收到通知後立即注入OC方法,而UIWebView的代理方法最早也是要在網頁開始加載的時候纔去注入,可能注入時機就稍稍晚一些

有哪裏表達不準確希望大神指正

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章