gpt4 book ai didi

Cocoa WebView导航白闪

转载 作者:行者123 更新时间:2023-12-03 16:05:13 25 4
gpt4 key购买 nike

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

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

关于如何解决这个问题有什么想法吗?

最佳答案

我也遇到了同样的问题,(大部分)通过实现三个委托(delegate)方法来根据 @justinvoss 的 suggestion on Twitter 禁用窗口上的刷新来修复它。 .

在窗口上禁用刷新时需要非常小心,因为如果禁用它,整个应用程序就会卡住,所以我确保不会多次执行此操作并将它们堆叠起来(-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;
}
}];
}

关于Cocoa WebView导航白闪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9059667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com