2015-10-03 4 views
9

Bei der Verwendung Uploadcare Datei-Upload-Widget, habe ich festgestellt, dass das Uploadcare-Skript das HTML-Tag neu streichen.Warum uploadcare HTML-Tag alle N ms neu streichen?

Ich bin nicht sicher, ob Neulackierung der richtige Begriff ist, aber hier ist das, was passiert ist: prüfen Chromdevtools die HTML Tag wird hervorgehoben, das gleiche Verhalten, wenn Sie ein Attribut auf ein Element hinzufügen/entfernen. Und es scheint nicht zu enden, es geht einfach weiter und auf jedem N ms. Sie können es auf ihrer Homepage überprüfen Uploadcare.com, öffnen Sie einfach devtools und werfen Sie einen Blick auf die HTML Tag.

Wer weiß, warum es das tut? Was ruft es an? Würde es Leistungsprobleme für mobile Benutzer verursachen?

+1

Sie entfernen und fügen das ID-Attribut fortlaufend hinzu. Sie können mit der rechten Maustaste auf den HTML-Knoten klicken und Änderungen an Attributänderungen auswählen, um dies selbst zu bestätigen. Warum sie es tun, nicht sicher, wenn du willst, kannst du ihren Code durchforsten, aber für mich hört es sich an wie eine Art Hack. – Nit

+0

@Nit netter Trick! Was auch immer ihre Gründe sind, es ist sehr lästig, ich kann CSS-Stile nicht mit den Devtools bearbeiten, weil es immer wieder neu streicht: | –

+0

Es gibt eine watch.js, die dies zu lösen scheint (und ständig auf https://mc.yandex.ru/webvisor btw) –

Antwort

8

Das Uploadcare-Plugin sucht alle 100ms auf der Seite nach neuen Widgets. Dies wird Live-Initialisierung genannt. Intern verwendet das Plugin jQuery (das die Sizzle-Selektor-Engine verwendet) und so funktioniert Sizzle tatsächlich: Es fügt id Elemente dem Stammelement des Suchbereichs vor der Abfrage hinzu und entfernt es danach. Sie können dies mit einem einfachen Beispiel überprüfen:

<script src="https://code.jquery.com/jquery-2.1.4.js"></script> 
<script> 
    setInterval(function() { 
    $.find('[attr]', document.documentElement); 
    }, 200); 
</script> 

Wenn Sie Schnippen vermeiden wollen, haben Sie zwei Möglichkeiten. Sie können live initialization überhaupt deaktivieren, indem Sie UPLOADCARE_LIVE = false; zu js-Code hinzufügen. Oder Sie können ein beliebiges benutzerdefiniertes id-Attribut zum html-Tag hinzufügen. Sizzle wird es nicht ändern.

In der Zukunft planen wir, MutationObserver zu verwenden, um nach neuen Widgets auf der Seite zu suchen.

+0

Irgendwelche Updates auf dem MutationObserver-Patch? Das macht mich verrückt. – Lee

+1

@Lee nur eine dieser Methoden jetzt, um Ihre Gesundheit zu speichern. Verwenden von "ID" am oberen HTML-Element ist das einfachste. –

+0

Tatsächlich tat ich, und es ist eine gute Übergangslösung. – Lee

Verwandte Themen