我們做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)確希望大神指正