Twitter フィードへのスタイルの適用
user2787001から提供された回答に基づいて構築したいと思います。このアプローチ( iframeでwaituntilexists.jsを使用)でも、スタイルが常に適用されているとは限らないことがわかりました。Twitter はこれをオンザフライでロードするため、iFrame がロードされるのを待つことは重要です。ただし、iframe はそのコンテンツをロードする必要があります。Twitter フィードを含む Web ページの更新に予想以上に時間がかかる場合は、存在しないものに再びスタイルを適用しようとします。最終的には、iframe 内のページにスタイルが実際に適用されていることを確認したいと考えています。
スタイリングを適用するために、適切なスタイルを含むスタンドアロンのスタイルシートを参照しました<link rel="stylesheet"... >
。これが正常に適用された#twitter-widget-styles
ことを確認するために、スタイルシートが配置されたことを確認するためにチェックできる ID ( ) を指定しました。
waituntilexists.js プラグインを使用する代わりに、.js を使用してその動作を模倣しましたwindow.setInterval
。 任意の遅延で使用しないでください。 window.setTimeout
Twitter の iframe とそのコンテンツの読み込みに予想以上に時間がかかる可能性は十分にあります。遅延が短すぎると、スタイルは適用されません。遅延が長すぎると、スタイルのないコンテンツ (FOUC)がユーザーに表示されます。
(注:#twitter-widget-0
は、Twitter が iframe で使用する ID です)
//Add twitter widget styling
var $iframeHead;
var twitterStylesTimer = window.setInterval(function(){
$iframeHead = $("iframe#twitter-widget-0").contents().find('head');
if( !$('#twitter-widget-styles', $iframeHead).length ){ //If our stylesheet does not exist tey to place it
$iframeHead.append('<link rel="stylesheet" href="/stylesheets/twitter-widget.css" id="twitter-widget-styles">');
}else if( $('#twitter-widget-styles', $iframeHead).length ){ //If stylesheet exists then quit timer
clearInterval(twitterStylesTimer);
}
}, 200);
チェック数の制限
iframe の読み込みに失敗した場合、またはスタイルシートが適用されなかった場合、タイマーは無期限に実行されます。これが懸念される場合は、カウンターを追加して、一定回数試行した後にプロセスを終了できます。
//Add twitter widget styling
var quitStyleCount = 0;
var $iframeHead;
var twitterStylesTimer = window.setInterval(function(){
$iframeHead = $("iframe#twitter-widget-0").contents().find('head');
if( !$('#twitter-widget-styles', $iframeHead).length ){ //If our stylesheet does not exist tey to place it
$iframeHead.append('<link rel="stylesheet" href="/stylesheets/twitter-widget.css" id="twitter-widget-styles">');
}else if( $('#twitter-widget-styles', $iframeHead).length || ++quitStyleCount > 40){ //If stylesheet exists or we've been trying for too long then quit
clearInterval(twitterStylesTimer);
}
}, 200);
遅延時間 (例では 200ms) とブレーク カウンター (40 サイクル) は、必要に応じて変更できます。
クロスドメインの制限
コードをiframeに挿入することに関する懸念について。Twitter によってレンダリングされた iframe を見ると、src
別のドメインからコンテンツをプルする属性がありません。
<iframe frameborder="0" height="200" id="twitter-widget-0" scrolling="no" allowtransparency="true" class="twitter-timeline twitter-timeline-rendered" allowfullscreen="" style="border: medium none; max-width: 100%; min-width: 180px; width: 520px;" title="Twitter Timeline"></iframe>
私はこれを完全には調査していませんが、iframe コンテンツはクライアント マシンで実行されている twitter スクリプトからオンザフライで生成されると考えています。したがって、それと対話しても、クロスドメインの制限に違反することはありません.
ツイート数の制限
ツイート数を制限するdata-tweet-limit="x"
には、埋め込みコードで使用されるアンカー タグの属性を使用します。
<a class="twitter-timeline" data-tweet-limit="3" href="https://twitter.com/xxxxxxxxxxxx" data-widget-id="xxxxxxxxxxxxx">Tweets by xxxxxxxxxx</a>...
これについては、twitter のドキュメントで説明されています。
ツイート制限: タイムラインのサイズを事前に設定したツイート数に固定するには、 data-tweet-limit="5" 属性を 1 ~ 20 ツイートの任意の値で使用します。タイムラインは、タイムラインから指定された数のツイートをレンダリングし、ウィジェットの高さを拡大して、スクロールせずにすべてのツイートを表示します。ウィジェットは固定サイズであるため、このオプションを使用する場合、更新をポーリングしません。
垂直スクロール バーを削除する
明確な答えを得るには、あなたのコードを見る必要があります。問題を解決する可能性のある属性があり、これもtwitter ドキュメントの「Chrome」セクションで説明されています。
data-chrome="noscrollbar"
noscrollbar : 表示されている場合、メインのタイムライン スクロールバーをトリミングして非表示にします。標準のユーザー インターフェイス コンポーネントを非表示にすると、Web サイトのアクセシビリティに影響を与える可能性があることを考慮してください。
CSS スタイルは、 などのオプションを使用してスクロールバーを制御することもできますoverflow: hidden
。