IOS WebView调用返回事件后,加载的js事件无法触发


IOS WebView调用返回事件后,加载的js事件无法触发_第1张图片

2018年2月1日星期四


  • 最近接近一年一直都在做Hybrid App,开发起来问题非常的多,而且大部分都是非常规问题。今天就记录一个非常规问题。UIWebView调用后之前正常工作的js无法触发。
[self.webview goBack];
  • 经过前端和后端的艰难排错和调试,最后定位于:每次调用goBack后[与js的history.go(-1)同],UIWebView后退后(前进同样)会刷新一遍,既执行一次reload方法,这样会造成UIWebView界面有个问题,在静态页面写死的元素和事件都会被刷掉,动态添加的数据和元素并无此问题。
  • 问题被定位出来了就好找解决方案了
  • 1.IOS层面解决UIWebView后退/前进刷新的问题
  [[NSUserDefaults standardUserDefaults] setInteger:2 forKey: @"WebKitCacheModelPreferenceKey"];
//这里是调用的私有api,
//把WevView类的cacheModel设置成WebCacheModelPrimaryWebBrowser,
//因为这个上架被拒绝的人可不在少数,这里需要进行特殊处理。
  id webView = [self.webview valueForKeyPath:@"_internal.browserView._webView"];
  id preferences = [webView valueForKey:@"preferences"];
  [preferences performSelector:@selector(_postCacheModelChangedNotification)];
IOS WebView调用返回事件后,加载的js事件无法触发_第2张图片
0-1
  • 2.js修改写法,把元素写成动态去添加。

经过方案对比处理,最终选取了方案二,修改js写法。其一的原因是,就几个web页面出现了这种情况,其二是以后App如果走AppStore的话,还需要更多的处理手段。但我更倾向于使用私有api,使用加密解密尽量避免苹果审查。如果有好的避免私有api方案,欢迎留言讨论。

你可能感兴趣的:(IOS WebView调用返回事件后,加载的js事件无法触发)