首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cocoa WebView导航白光闪烁

Cocoa WebView导航白光闪烁
EN

Stack Overflow用户
提问于 2012-01-30 13:16:52
回答 1查看 1.8K关注 0票数 9

每当我的WebView在URL之间导航时,我就会看到白光闪烁。

换句话说,WebView在导航之间处于未呈现状态,并且只显示应用程序的背景色。

有什么办法解决这个问题吗?

EN

回答 1

Stack Overflow用户

发布于 2012-04-15 05:16:58

我也有同样的问题,(主要)通过实现三个委托方法来修复它,根据@justinvoss的suggestion on Twitter,禁用窗口上的刷新。

在窗口上禁用刷新功能时需要非常小心,因为如果将其禁用,整个应用程序都会冻结,所以我确保不会多次执行该操作并将它们堆叠在一起(据记录,-webView:didCommitLoadForFrame:有时会因一次加载而被多次调用),并且会意外地将窗口冻结

代码语言:javascript
复制
@implementaton ViewControllerClass {
    BOOL _windowFlushDisabled;
}


- (void)webView:(WebView *)sender didCommitLoadForFrame:(WebFrame *)frame;
{
    if (!_windowFlushDisabled && sender.window) {
        [sender.window disableFlushWindow];
        _windowFlushDisabled = YES;
    }
}
- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame;
{
    if (_windowFlushDisabled) {
        [sender.window enableFlushWindow];
        [sender.window flushWindowIfNeeded];
        _windowFlushDisabled = NO;
    }
}
- (void)webView:(WebView *)sender didFailLoadWithError:(NSError *)error forFrame:(WebFrame *)frame;
{
    [self webView:sender didFinishLoadForFrame:frame]; // re-enable flushing
}

@end

偶尔我仍然会看到闪光,我目前的理论是,这个回调是在所有资源都加载了,但绘制不一定完成时进行的。遗憾的是,这似乎是我们唯一的回调。

如果你使用的是10.6或更高版本,你可以使用这个技巧来解决这个问题,将刷新启用延迟到事件结束:

代码语言:javascript
复制
- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame;
{
    [[NSOperationQueue mainQueue] addOperationWithBlock:^{
        if (_windowFlushDisabled) {
            [self.libraryDocument.windowForSheet enableFlushWindow];
            [self.libraryDocument.windowForSheet flushWindowIfNeeded];
            _windowFlushDisabled = NO;
        }
    }];
}
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9059667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档