35 votes

WKWebView se bloque dans acceleratedAnimationDidStart

Je suis en train d'avoir un crash sur l'application d'un client et, à part un lot à l'écran, je n'ai pas réussi à le résoudre. WTFCrash je ne tire pas grand profit de la trace de la pile.

J'utilise un WKWebView L'exemple suivant montre une page web qui contient des animations CSS et une vidéo. Le problème se produit sous iOS 8 et 9 sur une grande variété d'appareils (de l'iPhone 5c au 6s et une gamme similaire d'iPads).

Le site WKWebView s'exécute dans son propre processus, et non dans celui de l'application. Lorsque le crash se produit, une couche blanche recouvre l'application principale, la rendant inaccessible même si son processus n'a pas été affecté.

En regardant les journaux des périphériques, je trouve des pannes provenant de la fonction com.apple.WebKit.WebContent et ils ont tous exactement le même journal pour le fil planté.

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   JavaScriptCore                  0x0000000184c9f22c WTFCrash + 72
1   JavaScriptCore                  0x0000000184c9f224 WTFCrash + 64
2   WebKit                          0x0000000188ecd850 WebKit::RemoteLayerTreeDrawingArea::acceleratedAnimationDidStart(unsigned long long, WTF::String const&, double) + 0
3   WebCore                         0x0000000184f2e70c WebCore::ThreadTimers::sharedTimerFiredInternal() + 148
4   WebCore                         0x0000000184f2e64c WebCore::timerFired(__CFRunLoopTimer*, void*) + 36
5   CoreFoundation                  0x000000018107d81c __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 28
6   CoreFoundation                  0x000000018107d4c0 __CFRunLoopDoTimer + 884
7   CoreFoundation                  0x000000018107abd4 __CFRunLoopRun + 1520
8   CoreFoundation                  0x0000000180fa4d10 CFRunLoopRunSpecific + 384
9   Foundation                      0x00000001819b4d8c -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 308
10  Foundation                      0x0000000181a09ff8 -[NSRunLoop(NSRunLoop) run] + 88
11  libxpc.dylib                    0x0000000180d68cf8 _xpc_objc_main + 660
12  libxpc.dylib                    0x0000000180d6aa2c xpc_main + 200
13  com.apple.WebKit.WebContent     0x0000000100057924 0x100054000 + 14628
14  libdyld.dylib                   0x0000000180b428b8 start + 4

Voici un exemple de code html/css que nous utilisons pour reproduire le problème.

        var initialWidth = 100;
        window.addEventListener('load', function() {
          var div = document.getElementById('mytest');
          div.className = '';
          setInterval(function() {
            initialWidth += 10;
            if (initialWidth > 1000) {
              initialWidth = 1;
            }
            div.style.height = initialWidth + 'px';
          }, 40);
        }, false);

        body {
          background-color: #4cb9e4;
        }

        div#mytest {
          position: absolute;
          top: 0;
          width: 100%;
          height: 5000px;
          background-color: rgba(0, 0, 0, 0.7);
          text-align: center;
          overflow-y: hidden;
          -webkit-transition-property: height;
          -moz-transition-property: height;
          transition-property: height;
          -webkit-transition-duration: 0.5s;
          -moz-transition-duration: 0.5s;
          transition-duration: 0.5s;
          -webkit-transition-timing-function: ease;
          -moz-transition-timing-function: ease;
          transition-timing-function: ease;
        }

        div#mytest.hidden {
          height: 0;
        }

    <body>
      <div class="hidden" id="mytest">
        This is sample test
      </div>
    </body>

Cela vous semble-t-il familier ? Y a-t-il quelque chose que je devrais dire à l'ingénieur Web de changer en ce qui concerne l'animation ?

0 votes

Pouvez-vous afficher le code qui contient le CSS et le HTML ?

3 votes

Vous devez vraiment fournir des informations supplémentaires pour cette question afin d'obtenir une réponse valable. Les Webviews peuvent être très bizarres et difficiles à gérer, vous avez besoin d'autant d'informations que possible pour les diagnostiquer.

0 votes

Avez-vous trouvé une solution à ce problème ? J'ai un utilisateur de mon application qui obtient des plantages de WebContent à partir d'une WKWebView.

1voto

pablogeek Points 262

Vous devez créer le webView dans le fil d'exécution principal.

- (void)createWebView{
    if (![NSThread isMainThread]) {
        dispatch_async(dispatch_get_main_queue(), ^{
            [self createWebView];
        });
        return;
    }
    self.webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 320)];
    //Rest of my code
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X