美文网首页
IOS WebView调用返回事件后,加载的js事件无法触发

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

作者: mqhong | 来源:发表于2018-02-01 10:00 被阅读1312次

    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方案,欢迎留言讨论。

    相关文章

      网友评论

          本文标题:IOS WebView调用返回事件后,加载的js事件无法触发

          本文链接:https://www.haomeiwen.com/subject/cgirzxtx.html