Cocoa WebView导航白色闪存

Cocoa WebView导航白色闪存,cocoa,webview,Cocoa,Webview,每当我的WebView在URL之间导航时,我都会得到一个白色的闪光 换句话说,WebView在导航之间处于未渲染状态,只显示应用程序的背景色 有没有办法解决这个问题?我也遇到了同样的问题,(大部分)通过按照@justinvoss的方法实现三种委托方法来禁用窗口刷新,从而解决了这个问题 在禁用窗口刷新时需要非常小心,因为如果禁用它,整个应用程序都会冻结,因此我确保不会多次执行此操作并将其堆叠起来(-webView:didCommitLoadForFrame:被记录为有时一次加载会多次调用)不小心把

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

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

有没有办法解决这个问题?

我也遇到了同样的问题,(大部分)通过按照@justinvoss的方法实现三种委托方法来禁用窗口刷新,从而解决了这个问题

在禁用窗口刷新时需要非常小心,因为如果禁用它,整个应用程序都会冻结,因此我确保不会多次执行此操作并将其堆叠起来(
-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或更高版本,您可以使用此破解将刷新启用延迟到事件结束:

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

您正在加载的URL是本地的还是远程的?Safari如何处理相同的链接?您是否在WebKit视图中启用了JavaScript?它是本地url和远程url之间的一个flash。Safari手柄可立即切换。是的,JavaScript已启用-在下载新页面时,WebView将取消呈现。