博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS开发小知识之WebViewJavascriptBridge 与 NJKWebViewProgress 导致的冲突解决
阅读量:7039 次
发布时间:2019-06-28

本文共 1559 字,大约阅读时间需要 5 分钟。

iOS开发中 与 都是与UIWebView相关的两个优秀的第三方库,WebViewJavascriptBridge 可以帮助iOS客户端与web端完成操作的交互,NJKWebViewProgress可以在webView加载时显示加载的进度,但这两个第三方同时使用就会产生冲突。

具体表现为创建代码的先后顺序,如果先创建WebViewJavascriptBridgeNJKWebViewProgress作用就会消失,显示不出来进度条,如果先集成NJKWebViewProgress那么WebViewJavascriptBridge的作用就会消失,前端就无法调用客户端本地的方法。 造成这个冲突的原因是因为UIWebViewdelegete 被置换了,delegate 在ARC下都是week ,所以当你指定了NJKWebViewProgressdelegate,然后又指定 了WebViewJavascriptBridgedelegate,两次交替,最终只会一个delegate会生效

我目前的解决方法为先创建 WebViewJavascriptBridge 然后再创建 NJKWebViewProgress 但是设置 NJKWebViewProgress 对象的代理时 设置为刚刚创建的WebViewJavascriptBridge对象, 主要是webViewProgress.webViewProxyDelegate = self.jsBridge这一句。如果设置为webViewProgress.webViewProxyDelegate = self就会出现上面的问题。

代码:

self.webView = [[UIWebView alloc] initWithFrame:self.view.bounds]    [self.view addSubview:self.webView];    [WebViewJavascriptBridge enableLogging];    self.jsBridge = [WebViewJavascriptBridge bridgeForWebView:self.webView];    [self.jsBridge setWebViewDelegate:self];    [self JavaScriptCallObjectiveC];        webViewProgress = [[NJKWebViewProgress alloc] init];    self.webView.delegate = webViewProgress;    webViewProgress.webViewProxyDelegate = self.jsBridge;    webViewProgress.progressDelegate = self;        webViewProgressView = [[NJKWebViewProgressView alloc] init];    webViewProgressView.frame = CGRectMake(0, 64, SCREEN_WIDTH, 2);    webViewProgressView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin;    [webViewProgressView setProgress:0 animated:YES];    [self.view addSubview:webViewProgressView];复制代码

转载地址:http://drial.baihongyu.com/

你可能感兴趣的文章