私は、Twitter の埋め込みタイムラインについて多くの調査を行ってきました。タイムラインの読み込みが完了してページに表示されるタイミングを知ることができるかどうかを調べようとしています。この問題はリクエスト済みですが、まだ実装されていません。私は行き止まりになりました。誰かが解決策を見つけるのを手伝ってくれることを願っています。これが私がこれまでに見つけたものです:
埋め込みタイムラインを追加するコード:
<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>
スクリプトを実行するとどうなるか:
<a>
スクリプトは、タグを<iframe>
要素に置き換えます。のコンテンツ
iframe
は準備できていますが、アバター画像と「@username をフォロー」ボタンのダウンロードが完了していません。の属性は 0 に設定されてiframe
いるheight
ため、画像なしではコンテンツは表示されません。アバター画像はダウンロードされますが、「@username をフォロー」ボタンはまだダウンロード中です。コンテンツはまだ表示されません。
「@ユーザー名をフォロー」ボタンのダウンロードが完了しました。の属性は、 のコンテンツの高さと一致するように設定されてい
iframe
ます。タイムラインが表示されるようになりました。height
iframe
今、タイムラインがいつ表示されるかを把握するために考えられるすべてのことを試しました(settimeout / intervalを使用せずに)。目標は、非ポーリング イベント/関数/コールバックを持つことです。これまでに成功せずに試したことは次のとおりです。
- 、、
iframe
などのイベント リスナーを設定して、コンテンツの読み込みがいつ完了したかを認識します。には属性がないため、これは機能しません。醜いコードを調べた後 (圧縮されていないバージョンを見つけることができませんでした)、書き込みを使用してコンテンツを.onload
DOMContentLoaded
DOMFrameContentLoaded
iframe
src
iframe
height
で属性が変更されたときにイベント リスナーを設定しますiframe
。理論的には、このイベントは 3 回発生する必要があります。1 回目はコンテンツの読み込み時、2 回目height
は が 0 に設定されたとき、3回目height
は が完全に読み込まれたタイムラインを表示するように設定されたときです。ただし、最初の 2 つのケースでしかイベントを発生させることができず、3 番目のケース (実際に必要だったケース) では発生しませんでした。DOMSubtreeModified
、onreadystatechange
、およびを使用しましたが、イベントを発生させるためonpropertychange
だけに機能しました。DOMSubtreeModified
- のコンテンツにイベント リスナーを設定し
iframe
ます。JavaScript は Twitter から の内部に到達できるため、 ( や など)iframe
内の任意の要素を取得できます。ただし、、、またはイベント リスナーをまたはに追加しても、これらのイベントは発生しません。iframe
document
window
onload
DOMContentLoaded
DOMFrameContentLoaded
window
document
iframe
- 「@username をフォロー」ボタンにイベント リスナーを設定します。ボタンは、実際には属性
iframe
を持つです。src
イベントを設定するonload
ことで、ロード時に発火します。ただし、onload
イベントは常に 2 回発生します。1 回目はダウンロードが完了したとき、2 回目は処理が完了したときです。2 回目のトリガーの直後に、タイムラインが表示されます。ただし、これを実装するにはかなりのハックです (すべてそうだと思います) の内容がiframe
読み込まれるのを待ち、内部に到達して 'follow @username' を取得し、それにイベントをiframe
設定onload
してから、2 番目のイベントが実行されるのを待つ必要があるためです。火。 twttr.widgets.createTimeline()
コールバック用のオプションのパラメーターを持つ関数を使用します。ただし、コールバックはコンテンツの準備ができたとき (手順 2) に呼び出されますが、iframe が表示されるとき (手順 4) には呼び出されません。
この時点で忘れていた組み合わせが他にもいくつかあるはずです。Twitter を使用するgithub gistが存在することは知っていwidget.js
ますが、それにコールバックを追加します。これを機能させることができませんでした。
ログの質問で申し訳ありませんが、誰かが助けてくれることを願っています。ありがとう。