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


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)];
0-1
  • 2.js修改写法,把元素写成动态去添加。

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。