在UIWebView中,如果我调用函数goback,则会出现上一页并执行其js代码并在导航栏上设置标题。但是,这在wkwebview中不起作用,似乎wkwebview缓存了一些东西并且没有执行js代码。
答案 0 :(得分:2)
我认为WKWebView
实际上是关于load
事件的更正确行为。
我发现pageshow
事件更适合需要在导航更改上运行的代码。
这样的事情应该适用于WKWebView
:
window.addEventListener('pageshow', function(event) {
// We were just shown again. Either initial load or due to
// navigation.
});
答案 1 :(得分:0)
我遇到了类似的问题并且网页没有被重新加载(在iOS 9.2或更高版本上),因为它在调用goBack
时显示了缓存的网页。
'已修复'在WKWebView
上调用goBack之前清除缓存数据。我仍然不知道它是iOS错误还是Apple决定改变iOS 9.2的默认行为。
在Objective-C中会是这样的:
- (void)goBack {
[self cleanCacheWithCompletionHandler:^{
[super goBack];
}];
}
- (void)cleanCacheWithCompletionHandler:(void (^)(void))completionHandler {
if ([WKWebsiteDataStore class]) {
NSSet *websiteDataTypes = [NSSet setWithArray:@[ WKWebsiteDataTypeDiskCache,
WKWebsiteDataTypeMemoryCache]];
NSDate *dateFrom = [NSDate dateWithTimeIntervalSince1970:0];
[[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:websiteDataTypes modifiedSince:dateFrom completionHandler:completionHandler];
} else {
completionHandler();
}
}
请注意,我在示例代码中将WKWebView
子类化,并且您必须检查WKWebsiteDataStore
的可用性,因为它是iOS 9的新功能。