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