2016-02-16 5 views
10

Ich benutze AngularJS 1.5.0 und Microsoft Edge Browser Bildschirm spiegelt nicht das DOM.AngularJS Microsoft Edge-Bildschirm spiegelt nicht das DOM

Ich hätte gerne einen Vorschlag, wie dies behoben werden kann.

Ich kann nicht wirklich eine Korrektur für jedes Element anwenden, da die Anwendung mit dynamischem Benutzerinhalt einschließlich Winkelgleichungen etwas groß ist. Auch die App enthält viele dynamische Bindungen mit Eingabefeldern verknüpft.

Wenn Sie den Text mit der Maus auswählen, wird die 0 zu einer 2, die im folgenden Beispiel der richtige Wert ist. Auch das Ändern des Positionsstils hin und her scheint Edge zu zwingen, das Element neu zu zeichnen, aber es ist ein hässlicher Fix, den ich nicht sehr mag und der an so vielen Stellen ausgelöst werden muss (Ajax-Anfrage, Eingabeänderungen usw.) ...)

Die Seite beginnt mit einem Wert von 0. Dann wird ein Ajax-Aufruf gemacht und es gehen die realen Daten holen. Nach einigen Experimenten erscheint der Fehler nur, wenn die neuen Daten 1 Zeichen lang sind (zB 2 oder 9). Und es passiert jedes Mal. Wenn es sich um eine 2-stellige Nummer (zB 26) handelt, erscheint die gute Nummer.

Jede Hilfe zu diesem Thema würde gerne gewürdigt werden.

enter image description here

+1

Ich habe Berichte über solche Probleme gehört; Ist diese Seite online für direkten Zugriff? Ich arbeite am Microsoft Edge-Team und würde gerne genauer hinsehen. Eine Sache, die Sie versuchen können, ist, ein Repaint des Elements zu erzwingen, nachdem sich der Wert geändert hat. Hierfür gibt es zahlreiche Möglichkeiten. Sie können beispielsweise versuchen, das Element "background: auto" zu setzen. – Sampson

+0

@Sampson. Ich kontaktierte Sie über eine private Nachricht in Twitter, um Ihnen die URL, den Benutzernamen und das Passwort zu geben. –

+0

@Sampon irgendwelche Updates zu diesem Thema? Einige Teile unserer Anwendung scheinen aufgrund dieses Fehlers kaputt zu sein und einer unserer Kunden plant, bald auf Microsoft Edge zu aktualisieren ... – Wilgert

Antwort

7

Wir waren vor dem gleichen Problem, und es gestoppt auftritt, nachdem die text-transform: uppercase Stil aus den Elementen zu entfernen, die nicht aktualisieren.

@Sampson, es sieht aus wie ein Fehler in Edge.

+2

Ich denke, dass das Problem hier mit dem ersten Zustand und dem zweiten Zustand mit den gleichen Dimensionen sein kann, und der Browser dies nicht tut denke, es muss aktualisiert werden. Versuchen Sie zum Beispiel, den letzten Zustand mit 10 zu multiplizieren (was zu einer Zahl mit mehr Ziffern führt). Ich bin neugierig, ob dies auch das Problem löst. – Sampson

+0

@Sampson ja, es tut tatsächlich. Wir sind auch an Zahlen gebunden, und wenn sich die Anzahl der Ziffern ändert, wird sie aktualisiert. – Wilgert

+0

Vielen Dank für die Bestätigung, dass für mich; Als vorübergehende Lösung können Sie den Wert zunächst auf eine leere Zeichenfolge festlegen und dann die nächste Zahl festlegen. Ich habe gerade ein paar Ingenieure, die diese Situation untersuchen. – Sampson

0

konnte ich eine temporäre Lösung mit der Verwendung von Mutation Observer machen.

Kleines Skript, das ich gemacht habe, das für AngularJS Elemente arbeitet, schuf Serverseite.

Derzeit sind das die einzigen, die Probleme in meiner App verursachen.

<script>  
$(document).ready(function(){ 
    var ua = navigator.userAgent; 
    var re = new RegExp("Edge/"); 
    if (re.exec(ua) != null){ 
    console.log('edgeMutationObserver ON!!') 
    var edgeMutationConfig = { characterData: true, subtree: true }; 
    var edgeMutationObserver = new MutationObserver(function(mutations) { 
     var rgb_p = /rgb\((\d+), (\d+), (\d+)\)/g; 
     var rgba_p = /rgba\((\d+), (\d+), (\d+), (\d.?\d*)\)/g; 

     mutations.forEach(function(mutation){ 
     if(mutation.target.nodeType == 3){ 
      var that = mutation.target.parentNode; 
      // Save the background color 
      var bgc = that.style.backgroundColor; 

      // Get applied style from style or css 
      var bgc_css = bgc || $(that).css('backgroundColor'); 
      var bgc_temp,match; 
      if(match = rgb_p.exec(bgc_css)){ 
      // rgb transformed in rgba triggers update 
      bgc_temp = 'rgba('+match[1]+','+match[2]+','+match[3]+',1)'; 
      }else if(match = rgba_p.exec(bgc_css)){ 
      // Slightly modify transparency 
      var alpha = match[4] == 0 ? 0.01 : match[4] - 0.01 ; 
      bgc_temp = 'rgba('+match[1]+','+match[2]+','+match[3]+','+alpha+')'; 
      }else{ 
      // If either inline style or css is already equal to transparent the redraw is not made so i choose an alternate color with 0 opacity 
      bgc_temp = bgc_css != 'transparent' ? 'transparent' : 'rgba(0,0,0,0)'; 
      } 

      // Change background color to force redraw 
      that.style.backgroundColor = bgc_temp; 
      setTimeout(function(){ 
      // Apply back previous style 
      // Doesn't redraw without a timeout in Edge 
      that.style.backgroundColor = bgc; 
      },0); 
     } 
     }); 
    }); 

    $('.ng-binding').each(function(){ 
     edgeMutationObserver.observe(this, edgeMutationConfig); 
    }); 
    } 
}); 
</script> 
Verwandte Themen