UIWebView 與JS互動,JSContext注入時機
阿新 • • 發佈:2019-01-30
我們做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的代理方法最早也是要在網頁開始載入的時候才去注入,可能注入時機就稍稍晚一些
有哪裡表達不準確希望大神指正