繁体   English   中英

Cocoa WebView导航白色闪光灯

[英]Cocoa WebView navigation white flash

每当我的WebView在URL之间导航时,我都会收到白色闪光。

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

有关如何绕过这个的任何想法?

我有同样的问题,(大多数)通过实现三个委托方法来修复它,以根据@ justinvoss 在Twitter上建议禁用窗口上的刷新。

在窗口上禁用flush时需要非常小心,因为如果你禁用它,你的整个应用程序似乎都会冻结,所以我确保我不会多次这样做并将它们叠加起来( -webView:didCommitLoadForFrame:记录到有时可以多次调用一次负载)并意外地将窗口冻结

@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或更高版本,则可以使用此hack来解决冲突,直到事件结束:

- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame;
{
    [[NSOperationQueue mainQueue] addOperationWithBlock:^{
        if (_windowFlushDisabled) {
            [self.libraryDocument.windowForSheet enableFlushWindow];
            [self.libraryDocument.windowForSheet flushWindowIfNeeded];
            _windowFlushDisabled = NO;
        }
    }];
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM