IOS WebView調(diào)用返回事件后,加載的js事件無法觸發(fā)


2018年2月1日星期四


  • 最近接近一年一直都在做Hybrid App,開發(fā)起來問題非常的多,而且大部分都是非常規(guī)問題。今天就記錄一個非常規(guī)問題。UIWebView調(diào)用后之前正常工作的js無法觸發(fā)。
[self.webview goBack];
  • 經(jīng)過前端和后端的艱難排錯和調(diào)試,最后定位于:每次調(diào)用goBack后[與js的history.go(-1)同],UIWebView后退后(前進同樣)會刷新一遍,既執(zhí)行一次reload方法,這樣會造成UIWebView界面有個問題,在靜態(tài)頁面寫死的元素和事件都會被刷掉,動態(tài)添加的數(shù)據(jù)和元素并無此問題。
  • 問題被定位出來了就好找解決方案了
  • 1.IOS層面解決UIWebView后退/前進刷新的問題
  [[NSUserDefaults standardUserDefaults] setInteger:2 forKey: @"WebKitCacheModelPreferenceKey"];
//這里是調(diào)用的私有api,
//把WevView類的cacheModel設(shè)置成WebCacheModelPrimaryWebBrowser,
//因為這個上架被拒絕的人可不在少數(shù),這里需要進行特殊處理。
  id webView = [self.webview valueForKeyPath:@"_internal.browserView._webView"];
  id preferences = [webView valueForKey:@"preferences"];
  [preferences performSelector:@selector(_postCacheModelChangedNotification)];
0-1
  • 2.js修改寫法,把元素寫成動態(tài)去添加。

經(jīng)過方案對比處理,最終選取了方案二,修改js寫法。其一的原因是,就幾個web頁面出現(xiàn)了這種情況,其二是以后App如果走AppStore的話,還需要更多的處理手段。但我更傾向于使用私有api,使用加密解密盡量避免蘋果審查。如果有好的避免私有api方案,歡迎留言討論。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。