Zrobiłem wiele badań na temat Osadzonych list wątków Twittera. Próbowałem dowiedzieć się, czy można dowiedzieć się, kiedy kończy się ładowanie osi czasu, a na stronie wyświetla się , wyświetlając. To issue has been requested, ale jeszcze nie zostało wdrożone. Dotarłem do ślepego zaułka, mając nadzieję, że ktoś może mi pomóc znaleźć rozwiązanie. Oto co znalazłem do tej pory:Wczytanie na oś czasu w wiadomościach e-mail oddzwonionych pod numer
Kod dodać wbudowanego Czas:
<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ę dzieje, gdy skrypt jest uruchamiany:
Skrypt zastępuje tag
<a>
z element .Zawartość
iframe
jest gotowa, ale obraz awatara i przycisk "follow @username" nie są pobierane. Atrybutiframe
"height
jest ustawiony na 0, więc nie widzisz treści bez obrazów.Awatar obraz zostanie pobrany, ale przycisk „wykonaj @username” jest nadal pobierany. Treść nadal nie jest widoczna.
Przycisk 'śledzić @username' zakończeniu pobierania. Atrybut
iframe
'height
jest ustawiony tak, aby odpowiadał wysokości zawartościiframe
. Oś czasu jest teraz widoczna.
Teraz próbowałem wszystko mogę myśleć, aby dowiedzieć się, kiedy oś czasu jest widoczna (bez użyciu setTimeout/interwał). Celem jest uzyskanie zdarzenia/funkcji/wywołania niezwiązanego z odpytywaniem. Oto, co starałem dotąd bez powodzenia:
- Ustawianie detektory zdarzeń na
iframe
(takich jakonload
,DOMContentLoaded
,DOMFrameContentLoaded
itp), aby wiedzieć, kiedy zawartość zakończeniu ładowania. To nie działa, ponieważ atrybutiframe
nie ma atrybutusrc
. Po przejściu przez wulgaryzowany kod (nie mogłem znaleźć wersji nieskompresowanej), przypuszczam, że używa on zapisu, aby dodać treść do treściiframe
. - detektory zdarzeń Ustawienie wiedzieć, kiedy zmienia atrybut
height
naiframe
. Teoretycznie zdarzenie to powinno wystrzelić trzykrotnie: najpierw przy ładowaniu zawartości, po drugie, gdyheight
jest ustawione na 0, a trzecie, gdyheight
jest ustawione, aby pokazać w pełni załadowaną oś czasu. Mogłem jednak wydać to wydarzenie tylko w dwóch pierwszych przypadkach, a nigdy za trzecim (tym, którego faktycznie chciałem). UżyłemDOMSubtreeModified
,onreadystatechange
ionpropertychange
, ale tylkoDOMSubtreeModified
pracował do wypalania zdarzenia. - Ustawianie detektorów zdarzeń na podstawie pozycji
iframe
. Ponieważ JavaScript może osiągnąć wewnątrziframe
z Twittera, to jest możliwe, aby pobrać dowolny element wewnątrziframe
(takich jakdocument
lubwindow
). Jednak dodawanie detektorów zdarzeń ,DOMContentLoaded
lubDOMFrameContentLoaded
nadal nie wywołuje tych zdarzeń. - Ustawianie detektorów zdarzeń na przycisku "follow @ username". Przycisk faktycznie jest
iframe
, który ma atrybutsrc
. Ustawiając zdarzenieonload
, zostanie ono uruchomione, gdy zostanie załadowane. Jednak zdarzenieonload
zawsze będzie strzelać dwa razy. Po raz pierwszy po zakończeniu pobierania i drugim po zakończeniu przetwarzania. Natychmiast po drugim wyzwoleniu zostanie wyświetlona oś czasu. Wdrożenie tego jest jednak dość hackowe (wydaje mi się, że wszystko jest w porządku), ponieważ musisz poczekać aż zawartośćiframe
załaduje się, dotrzeć do środka i uzyskać "follow @username"iframe
, ustawić na nim zdarzenie , a następnie poczekać na drugie wydarzenie na ogień. - Korzystanie z funkcji
twttr.widgets.createTimeline()
, która ma opcjonalny parametr dla wywołania zwrotnego. Jednak wywołanie zwrotne jest wywoływane, gdy zawartość jest gotowa (krok 2), ale nie wtedy, gdy widoczna jest pozycja iframe (krok 4).
Prawdopodobnie jest jeszcze kilka kombinacji, o których w tym momencie zapomniałem. Wiem, że istnieje github gist, który używa Twittera widget.js
, ale dodaje do niego wywołania zwrotne. Nie mogłem tego zmusić do działania.
Przepraszamy za pytanie w dzienniku, ale mam nadzieję, że ktoś może pomóc. Dzięki.
Jak działa skrobak? Przyjrzałem się i uzyskujesz dostęp do zawartości ramki IFrame z innej domeny za pośrednictwem skryptu, co powoduje błędy bezpieczeństwa. To świetny pomysł, zastanawiałem się tylko, czy zrobiłeś coś ekstra, żeby to obejść. – Andy
@Andy, skrobak nie próbuje uzyskać dostępu do ramki IFrame z innej domeny. Widżet Twittera zawiera skrypt, który dynamicznie tworzy ramkę IFrame, ale nie ładuje jej bezpośrednio z innej domeny, więc nie otrzymujesz żadnych błędów bezpieczeństwa podczas próby zeskrobania go. – joom
Nie wiedziałem o 'twttr.events.bind'. Wydaje się, że strzela również we właściwym czasie. Dla każdego, kto zastanawia się nad tym, jakie wydarzenia są wiążące, możesz znaleźć informacje o wszystkich wydarzeniach tutaj: https://dev.twitter.com/docs/tfw/events. Ponadto tylko IE8 i poniżej nie obsługiwały zdarzeń onload dla skryptów. IE9 + robi (patrz http://pieisgood.org/test/script-link-events/). –