1. 程式人生 > >UIWebView 與JS互動,JSContext注入時機

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的代理方法最早也是要在網頁開始載入的時候才去注入,可能注入時機就稍稍晚一些

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