Wywołanie osi czasu na Twitterze
Prowadzę wiele badań nad wbudowanymi osiami czasu na Twitterze. Próbowałem dowiedzieć się, czy można wiedzieć, kiedy kończy się ładowanie osi czasu iwyświetla na stronie. Tozażądano wydania, ale nie został jeszcze wdrożony. Doszedłem do ślepej uliczki i mam nadzieję, że ktoś jest w stanie pomóc mi znaleźć rozwiązanie. Oto, co do tej pory znalazłem:
Kod do dodania Osadzonej osi czasu:
<a class="twitter-timeline" href="https://twitter.com/twitterapi" data-widget-id="YOUR- WIDGET-ID-HERE">Tweets by @twitterapi</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
Co się stanie, gdy skrypt zostanie uruchomiony:
Skrypt zastępuje<a>
tag z<iframe>
element.
Zawartośćiframe
są gotowe, ale obraz awatara i przycisk „follow @username” nie są pobierane. Theiframe
jestheight
atrybut jest ustawiony na 0, dzięki czemu nie widzisz zawartości bez obrazów.
Obraz awatara jest pobierany, ale przycisk „follow @username” nadal się pobiera. Treść nadal nie jest widoczna.
Zakończono pobieranie przycisku „follow @username”. Theiframe
jestheight
atrybut jest ustawiony tak, aby odpowiadał wysokości zawartościiframe
. Oś czasu jest teraz widoczna.
Teraz wypróbowałem wszystko, co myślę, aby dowiedzieć się, kiedy oś czasu jest widoczna (bez przy użyciu setimeout / interval). Celem jest uzyskanie zdarzenia / funkcji / wywołania zwrotnego bez odpytywania. Oto, co próbowałem dotychczas bez powodzenia:
Ustawianie detektorów zdarzeń naiframe
(Jak na przykładonload
, DOMContentLoaded
, DOMFrameContentLoaded
, itp.), aby wiedzieć, kiedy treść się zakończyła. To nie działa, ponieważiframe
nie masrc
atrybut. Po przejściu przez utrudniony kod (nie udało mi się znaleźć nieskompresowanej wersji) domyślam się, że używa zapisów, aby dodać treść do treściiframe
.Ustawianie odbiorników zdarzeń, aby wiedzieć, kiedyheight
zmiany atrybutów naiframe
. Teoretycznie to zdarzenie powinno wystrzelić trzy razy: najpierw, gdy zawartość ładuje się, druga, gdyheight
jest ustawiony na 0, a trzeci naheight
jest ustawiony, aby pokazać w pełni załadowaną oś czasu. Zdołałem jednak wystrzelić wydarzenie tylko w pierwszych dwóch przypadkach i nigdy w trzecim (tym, którego faktycznie chciałem). użyłemDOMSubtreeModified
, onreadystatechange
, ionpropertychange
, lecz tylkoDOMSubtreeModified
pracował na wypalanie imprezy.Ustawianie detektorów zdarzeń na elementachiframe
. Ponieważ JavaScript może dotrzeć do wnętrzaiframe
z Twittera można pobrać dowolny element wewnątrziframe
(Jak na przykładdocument
lubwindow
). Jednak dodanieonload
, DOMContentLoaded
lubDOMFrameContentLoaded
słuchacze zdarzeń nawindow
lubdocument
ziframe
nadal nie odpala tych wydarzeń.Ustawianie detektorów zdarzeń na przycisku „follow @username”. Przycisk jest w rzeczywistościiframe
to masrc
atrybut. Ustawiająconload
zdarzenie zostanie zwolnione po załadowaniu. Jednakżeonload
wydarzenie zawsze wystrzeli dwa razy. Pierwszy raz, gdy zakończy się pobieranie, a drugi, gdy zakończy przetwarzanie. Natychmiast po drugim spuście zostanie wyświetlona oś czasu. Wdrożenie tego jest jednak dość hack (chyba wszystko jest), ponieważ musisz poczekać na zawartośćiframe
ładować, sięgać do środka i uzyskać „follow @ username”iframe
, ustawonload
wydarzenie na nim, a następnie poczekaj na wystrzelenie drugiego zdarzenia.Używająctwttr.widgets.createTimeline()
funkcja, która ma opcjonalny parametr dla wywołania zwrotnego. Jednak wywołanie zwrotne jest wywoływane, gdy treść jest gotowa (krok 2), ale nie wtedy, gdy ramka iframe jest widoczna (krok 4).Prawdopodobnie jest jeszcze kilka kombinacji, o których zapomniałem w tym momencie. Wiem, że istniejegithub gist który korzysta z Twitterawidget.js
, ale dodaje do niego wywołania zwrotne. Nie udało mi się tego uruchomić.
Przepraszam za pytanie dziennika, ale mam nadzieję, że ktoś może pomóc. Dzięki.