为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript和iOS交互遇到的坑

JavaScript和iOS交互遇到的坑

30秒到达战场 2018-08-14 10:10:03
这段代码写的时机总是不对当我们在- (void)viewDidLoad中注入JS代码之后,如果页面发生了重定向,此时web页面的JS已经发生了变化,而- (void)viewDidLoad方法只会执行一次,所以不再是之前我们注入过的那些JS了,此时再调用本地方法自然就失效了。如果我们在- (void)webViewDidFinishLoad:(UIWebView )webView方法中注入JS,看起来貌似可以解决重定向之后调用失效的问题,因为webView每次加载完成后都会回调- (void)webViewDidFinishLoad:(UIWebView )webView,也就是说每次重定向之后,只要页面加载完成,JS代码就会重新被注入。如果JS调用OC方法的时机是在页面加载完成之后,比如点击web界面上的按钮或者由用户手动触发一个事件调用OC代码,这种情况一定是web页面加载完成之后才会发生的,而此时我们已经重新注入了JS,这样一点问题都没有。但是,如果JS调用OC方法的时机刚好发生在页面加载过程中呢?比如web界面加载过程中自动执行一些操作需要调用OC代码,而此时- (void)webViewDidFinishLoad:(UIWebView *)webView还没有回调,所以我们的JS代码并没有重新注入,这里仍然会造成失效的问题于是我找到了相关的第三方webview的延展UIWebView+TS_JavaScriptContext但是还是没有解决我的问题附上我的需求:js需要由客户端去请求接口,请求到的数据返回给js h5拿到数据后进行渲染,现在的问题是 比如一个h5界面需要三个串行数据请求之后才能渲染界面 相当于调用了js方法三次,但是只执行了一次js的方法 后面的都没有调用,请问如何解决!!!!附上我用第三方延展的写法
查看完整描述

1 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

不是客户端的问题,是js的问题,上面提到的就是解决uiwebview在渲染的时候调用js方法的答案,那种做法是正确的

查看完整回答
反对 回复 2018-09-26
  • 1 回答
  • 0 关注
  • 975 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信