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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、简介 近两年随着HTML5的迅速发展与日趋成熟,越来越多的移动开发者选择使用HTML5来进行混合开发,不仅节约...
    RainyGY阅读 5,897评论 1 12
  • 随着H5技术的兴起,在iOS开发过程中,难免会遇到原生应用需要和H5页面交互的问题。其中会涉及方法调用及参数传值等...
    Chris_js阅读 8,286评论 1 8
  • 前言 关于UIWebView的介绍,相信看过上文的小伙伴们,已经大概清楚了吧,如果有问题,欢迎提问。 本文是本系列...
    CoderLF阅读 12,981评论 2 12
  • 前言 Web 页面中的 JS 与 iOS Native 如何交互是每个 iOS 猿必须掌握的技能。而说到 Nati...
    幽城88阅读 6,644评论 1 8
  • 简书上的鸡汤文越来越多,最近反倒频繁看到一大批教导女孩,不要在最年轻的时候活的最差劲。 其实25岁的...
    Veronicag阅读 3,051评论 0 0