每当我的WebView在URL之间导航时,我都会收到白色闪光.
换句话说,WebView在导航之间处于未渲染状态,只显示应用程序的背景颜色.
有关如何绕过这个的任何想法?
Wil*_*ley 13
我有同样的问题,(大多数)通过实现三个委托方法来修复它,以根据@ justinvoss 在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
Run Code Online (Sandbox Code Playgroud)
偶尔我仍然会看到闪烁,我目前的理论是,当所有资源都被加载但是绘图不一定完成时,会进行此回调.遗憾的是,这似乎是我们唯一的回调.
如果您使用的是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;
}
}];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1771 次 |
| 最近记录: |