WKWebView的goback函数不执行javascript代码
Posted
技术标签:
【中文标题】WKWebView的goback函数不执行javascript代码【英文标题】:The goback function of WKWebView does not execute javascript code 【发布时间】:2016-01-14 02:28:59 【问题描述】:在 UIWebView 中,如果我调用函数 goback,则会出现上一页并执行其 js 代码并在导航栏上设置标题。但是,这在wkwebview中不起作用,似乎wkwebview缓存了一些东西并且js代码没有执行。
【问题讨论】:
我发现在uiwebview中点击返回按钮时会执行onload函数中的javascript代码,但是在wkwebview中不会发生这种情况 【参考方案1】:我认为WKWebView
实际上是关于load
事件的更正确的行为。
我发现pageshow
事件更适合需要在导航更改时运行的代码。
这样的东西应该可以在WKWebView
:
window.addEventListener('pageshow', function(event)
// We were just shown again. Either initial load or due to
// navigation.
);
【讨论】:
【参考方案2】:我遇到了类似的问题并且网页没有被重新加载(在 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 的新功能。
【讨论】:
谢谢兄弟。你救了我的命!以上是关于WKWebView的goback函数不执行javascript代码的主要内容,如果未能解决你的问题,请参考以下文章
WKWebView goBack 将我带到本地 html 页面的顶部
iOS监听H5页面goBack返回事件 & 网页监听APP返回键 (NavigationBackItemInjection)