zhongwuzw / WebBrowser

iOS浏览器 Web Browser for iOS
https://github.com/zhongwuzw/WebBrowser
MIT License
375 stars 92 forks source link

关于浏览器前进后退网页刷新的问题 #16

Open SoulmateL opened 6 years ago

SoulmateL commented 6 years ago

网页后退的时候会刷新呢。感觉不是很科学呢,是否有办法解决吗?

zhongwuzw commented 6 years ago

解决方法是监控点击事件,采用多窗口的机制,自己来管理前进后退,注意点是内存问题,因为UIWebView本身占用内存比较大,需要采取一些策略,比如只保留适当数量的UIWebView,内存警告时移除UIWebView,具体你可以参考一下我项目中长按链接,新窗口打开的模式,实现方法类似。

SoulmateL commented 6 years ago

恩,可能是我表达的有问题吧!就是调用goback会刷新webview,我根据网上的方法设置了cacheModel = WebCacheModelPrimaryWebBrowser但是好像没有生效呢

zhongwuzw commented 6 years ago

如果仅仅是想尝试优化一下后退的效果的话,试试如下代码吧。但是我本人还是不太建议使用这种方法,UIWebView在内存方面做得不好,所以需要做一些清除缓存的操作。自己维护前进后退列表的话,可以控制缓存的数量,根据实际应用控制平衡。

[[NSUserDefaults standardUserDefaults] setInteger:2 forKey: @"WebKitCacheModelPreferenceKey"];
id webView = [uiWebView valueForKeyPath:@"_internal.browserView._webView"];
id preferences = [webView valueForKey:@"preferences"];
[preferences performSelector:NSSelectorFromString(@"_postCacheModelChangedNotification")];
SoulmateL commented 6 years ago

好的,谢谢你了

zhongwuzw commented 6 years ago

@SoulmateL 不客气,友情提示,请不要在生产环境下使用这种KVC的方式来访问私有函数(私有函数需要转换一下,防止被拒),防止Crash. 建议使用msgSendrespondsTo...等类似方式一步步判断是否存在,然后再访问。