2015-10-03 11 views
9

Podczas korzystania z widgetu przesyłania plików Uploadcare zauważyłem, że skrypt Uploadcare ciągle zmienia etykietę na HTML.Dlaczego uploadcare jest malowanie znacznika html co N ms?

Nie jestem pewien, czy malowanie jest właściwe określenie, ale tutaj jest to, co się dzieje: Sprawdzanie Chromedevtools tag HTML jest podkreślenie, to samo zachowanie podczas dodawania/usuń atrybut w elemencie. I wydaje się, że się nie kończy, po prostu trwa i przy każdym N ms. Możesz to sprawdzić na stronie głównej: Uploadcare.com, po prostu otwórz devtools i spójrz na etykietę HTML.

Ktoś wie, dlaczego to robi? Jak to się nazywa? Czy spowodowałoby to problemy z wydajnością dla użytkowników mobilnych?

+1

Ciągle usuwają i dodają atrybut id. Możesz kliknąć prawym przyciskiem myszy węzeł html i wybrać podział modyfikacji atrybutów, aby to potwierdzić samodzielnie. _Dlaczego to robią, nie jestem pewien, jeśli chcesz, możesz przekopać się przez ich kod, ale dla mnie to brzmi jak jakiś hack. – Nit

+0

@Nit nice trick! Bez względu na powody są bardzo uciążliwe, nie mogę edytować stylów CSS za pomocą devtools, ponieważ nadal jest on odświeżany: | –

+0

Istnieje watch.js, który wydaje się wywoływać to (i stale wysyła do https://mc.yandex.ru/webvisor btw) –

Odpowiedz

8

Wtyczka Uploadcare wyszukuje nowe widżety na stronie co 100ms. Nazywa się to inicjalizacją na żywo. Wewnętrznie wtyczka używa jQuery (która używa silnika selektora Sizzle) i tak właśnie działa Sizzle: dodaje elementy id do głównego elementu zakresu wyszukiwania przed zapytaniem i usuwa je po. Możesz to sprawdzić na prostym przykładzie:

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

Jeśli chcesz uniknąć drgania, masz dwie opcje. Możesz całkowicie wyłączyć live initialization, dodając UPLOADCARE_LIVE = false; do kodu js. Możesz też dodać dowolny niestandardowy atrybut id do znacznika . Sizzle tego nie zmieni.

W przyszłości planujemy użyć MutationObserver, aby obejrzeć nowe widżety na stronie.

+0

Dowolna aktualizacja na łatce MutationObserver? To doprowadza mnie do szału. – Lee

+1

@Użyj tylko jednej z tych metod, aby uratować swoje zdrowie psychiczne. używanie 'ID' na górnym elemencie HTML jest najłatwiejsze. –

+0

Rzeczywiście tak zrobiłem i jest to wystarczająco dobre tymczasowe rozwiązanie. – Lee