ホーム自己紹介ブログ
NO.78
DATE2022. 05. 22

iframeでTwitterの埋め込みコンテンツの描画後に、画面表示する方法

結論

iframe.contentWindow から twttr オブジェクトを見つけて、event.bind("rendered", () => {}) の第二引数に、表示処理を書くことです。

iframe.addEventListener("load", () =>
  iframe.contentWindow.twttr.events.bind("rendered", () =>
    iframe.setAttribute("style", "opacity: 1;")
  )
);

背景

https://twitter.com/openwc/status/1427617679427440643 のような URL から、埋め込みコンテンツをブログサイトなどに表示したいです。

https://publish.twitter.com/oembed?url=${URL} のレスポンスの中の html が、埋め込みコンテンツになります。 これを iframe の srcdoc に設定することで、埋め込みコンテンツを表示することができます。

<iframe></iframe>
/*
const url = "https://twitter.com/openwc/status/1427617679427440643";
const oembedUrl = `https://publish.twitter.com/oembed?url=${url}`;
// response.html of `fetch(oembedUrl)` is html.
*/
const html =
  '<blockquote class="twitter-tweet"><p lang="en" dir="ltr">`npm init @‌open-wc` now supports lit v2!<br /><br />Give it a try and let us know what you think<a href="https://t.co/9191LFIYHZ">https://t.co/9191LFIYHZ</a></p>&mdash; Open Web Components (@OpenWc) <a href="https://twitter.com/OpenWc/status/1427617679427440643?ref_src=twsrc%5Etfw">August 17, 2021</a></blockquote>\n<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>\n';
 
const iframe = document.querySelector("iframe");
iframe.setAttribute("srcdoc", html);

課題

iframe で srcdoc を読み込んだ後、埋め込みたい Tweet の文字列だけが、チラっと見えてしまいます。 下の例であれば、npm init @‌open-wc now supports lit v2! がチラっと見えるはずです。reload をしてみると分かります。

チラっと見えてしまうのを阻止したいです。

解決

埋め込みコンテンツの描画後イベント rendered というものがあります。これを使います。

X Developer Platform - X

Build with X&#x27;s real-time data and APIs

developer.twitter.com

実装の順番は、次のとおりです。

  1. iframe から、load イベントを検知
  2. iframe.contentWindow から、twttr オブジェクトを見つける
  3. twttr.events.bind("rendered", () => {}) で、描画後の処理を書く

実際に、コードを書くと、次のとおりです。

/*
const url = "https://twitter.com/openwc/status/1427617679427440643";
const oembedUrl = `https://publish.twitter.com/oembed?url=${url}`;
// response.html of `fetch(oembedUrl)` is html.
*/
const html =
  '<blockquote class="twitter-tweet"><p lang="en" dir="ltr">`npm init @‌open-wc` now supports lit v2!<br /><br />Give it a try and let us know what you think<a href="https://t.co/9191LFIYHZ">https://t.co/9191LFIYHZ</a></p>&mdash; Open Web Components (@OpenWc) <a href="https://twitter.com/OpenWc/status/1427617679427440643?ref_src=twsrc%5Etfw">August 17, 2021</a></blockquote>\n<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>\n';
 
const iframe = document.querySelector("iframe");
iframe.addEventListener("load", () =>
  iframe.contentWindow.twttr.events.bind("rendered", () =>
    iframe.setAttribute("style", "opacity: 1;")
  )
);
 
iframe.setAttribute("srcdoc", html);

html は、styleで隠しておきます。(手段は問いません)

<iframe style="opacity: 0;"></iframe>

解決した結果が、こちらです。

npm init @‌open-wc now supports lit v2! のチラっとが見えなくなっているはずです。

サービス
フロントエンド

-

読者になる

|

シェアする

|

silverbirders

silverbirder

Webソフトウェアエンジニア
個人ブログキュレーション こぶりー 運営

ブログを応援する

この記事がよかったら、お布施という形で応援してもらえるとうれしいです。

おふせぼたん

※ ログイン不要で投稿できます。

※ 同じブラウザから投稿を削除できます。

0

読み込み中...

次の記事へ前の記事へ

関連する記事

タグ「サービス」の記事

1週間で完成!Spotifyタイアップ検索アプリを作った話(駆け出し9年目)

どうも、Web業界で働き始めて9年目の駆け出しエンジニア、silverbirderです。Spotifyで音楽を聴いていると「この曲、どこかで聞いたことがあるけど、何の主題歌だったかな?」と思うこと、ありませんか?特にドライブ中や作業中に、ふと気になることが多いですよね。 私もそんな経験があり、気になったその曲が主題歌だったアニメを見始めたことがきっかけで、「簡単にタイアップ情報(アニメやドラマなど)を調べられるアプリがあったら便利だな」と思い、このアプリを作ることにしました。

2024年09月24日

サービス
AI
Google
成果物
TikTokスクレイプ基盤をGCP上で構築してハマったこと

TikTokへスクレイプするバッチをGCP上で構築しました。GCP構築のシステム設計話と、その構築時に、ハマったことを共有します。

2021年08月28日

サービス
クラウドインフラ
成果物
クローリング
ZoomのMeetingを自動生成するGASライブラリ zoom-meeting-creator を作った

みなさん、Zoom使っていますか? ZoomのMeetingを自動生成するGASライブラリを公開しましたので、そのきっかけと使い方について紹介しようと思います。

2020年06月06日

成果物
Google
サービス

タグ「フロントエンド」の記事

Webmention 使ってみた

Webmention というのを最近知りました。 名前の通り、Web 上でメンションすることができます。 受信側、送信側、どちらも対応したので感想を残そうと思います。 Webmention ざっくりと Web AサイトにBサイトのリンクをつ

2026年09月08日

フロントエンド
個人開発
モジュールアップデートでやっていること

ITヲタクな AI くんにピッタリな仕事の一つは、モジュールアップデート。 特に、メジャーアップデートが超助かる。 昔だったら 数ヶ月掛かった移行も、数日たらずに対応できるようになったので、 さすが ITヲタクくん。 対応してよかったフロー

2026年07月24日

AI
フロントエンド
写経テストコードを全部消した

以下で書いた通り、プロダクトコードを写経したテストコードを削除しました。 "こぶりー" ( https://kobliy.vercel.app/ ) という個人ブログを読むアプリのコードです。 https://silverbirder.gi

2026年06月08日

AI
フロントエンド
テスト
← ブログ一覧へ