WKWebView的goback功能不执行javascript代码

时间:2016-01-14 02:28:59

标签: wkwebview

在UIWebView中,如果我调用函数goback,则会出现上一页并执行其js代码并在导航栏上设置标题。但是,这在wkwebview中不起作用,似乎wkwebview缓存了一些东西并且没有执行js代码。

2 个答案:

答案 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的新功能。