2012-01-30 6 views
9

WebViewがURL間を移動するたびに白い点滅が表示されます。Cocoa WebViewナビゲーション白いフラッシュ

つまり、WebViewはナビゲーション間の未表示の状態にあり、アプリケーションの背景色のみを表示します。

これを取得する方法に関するアイデアはありますか?

+0

では、ローカルまたはリモートのロードされたURLはありますか? Safariはどのように同じリンクを処理しますか? WebKitビューでJavaScriptを有効にしましたか? –

+0

ローカルURLとリモートURLの間の点滅です。 Safariのハンドルが即座に切り替わります。はい、JavaScriptが有効になっています - 新しいページがダウンロードされている間、WebViewはレンダリングされません。 –

答えて

13

@ justinvossのsuggestion on Twitterごとにウィンドウ上でflushを無効にする3つのデリゲートメソッドを実装することによって、(同じく)同じ問題が解決しました。

無効にしたままにするとアプリがフリーズしているように見えるので、ウィンドウでフラッシュを無効にするときは非常に注意する必要がありますので、何度もやり直してスタックしないようにしてください(-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; 
     } 
    }]; 
} 
関連する問題