【问题标题】:The goback function of WKWebView does not execute javascript codeWKWebView的goback函数不执行javascript代码
【发布时间】:2016-01-14 02:28:59
【问题描述】:

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

【问题讨论】:

  • 我发现在uiwebview中点击返回按钮时会执行onload函数中的javascript代码,但是在wkwebview中不会发生这种情况

标签: 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 的新功能。

    【讨论】:

    • 谢谢兄弟。你救了我的命!
    猜你喜欢
    • 2018-08-16
    • 1970-01-01
    • 1970-01-01
    • 2014-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多