美文网首页iOS Developer
UIWebView 与JS交互,JSContext注入时机

UIWebView 与JS交互,JSContext注入时机

作者: jy__Lu | 来源:发表于2017-09-27 10:10 被阅读226次

我们做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的代理方法最早也是要在网页开始加载的时候才去注入,可能注入时机就稍稍晚一些

有哪里表达不准确希望大神指正

相关文章

网友评论

    本文标题:UIWebView 与JS交互,JSContext注入时机

    本文链接:https://www.haomeiwen.com/subject/thvyextx.html