AMP対応サイトでGoogle Drive動画の埋め込みでエラーを出させない方法!

AMP対応サイトでGoogle Drive動画の埋め込みでエラーを出させない方法!

Tech

やたらと制約が多くて面倒くさいAMPですが、amp-iframeのエラーが消えなかった問題を解決できたのでまとめてみました。

AMPでもエラーを出さすずにiframeを使うには?

ifreameだけだと対比が変になる

Google Driveの「アイテムの埋め込み」から得られるコードは下記のコードです。

<iframe src="https://drive.google.com/file/d/16Eu8qvqEwhnn_r3C9QfVz3VC5cSvLzYb/preview" width="640" height="480" allow="autoplay"></iframe>

これをスマホで表示すると下に伸ばしたようなサムネイルになってすごくダサいです。

↑こんな感じです。

divで囲んでみる

youtubeの動画をCSSで固定比レイアウトにする - Qiita
youtubeの動画をレスポンシブで表示させたいときに使えるCSSです。 埋め込むiframeとそれを囲う要素の2つにスタイルを指定します。 埋め込みコード 以下のように、埋め込みコードは発行した際、縦と横の長さの数値を指定することになります。

この記事を参考にdivとCSSで固定レイアウトになるように調整してみます。

WordPressの場合、毎回動画を埋め込んでる訳ではないので、styleタグでCSSの記述をします。

<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
 <iframe style="position: absolute; width: 100%; height: 100%; border: 0;" src="https://drive.google.com/file/d/16Eu8qvqEwhnn_r3C9QfVz3VC5cSvLzYb/preview" width="640" height="360"></iframe>
</div>

この時注意すべき点がいくつかあります。

まず、divのstyle内の「height: 0」ですが、これが主にamp対策です。

詳しいことはわかりませんが、ampではheight値が指定されていないとエラーが出てampページとして有効化されないので、必須です。

次にiframeのstyle内の「border: 0」です。

これは、上記画像の用に動画の隅のボーダーの表示を0にするということを表していて、WordPressが自動で行うYouTubeの埋め込みでは表示されないので、それに合わせて表示しないようにしています。

最後は、iframeのstyleの外にある「width="640" height="360"」です。

表示上はこのコードがなくても、CSSのおかげで問題なく見えるのですが、iframeのコード的にはこれなしでは不完全と判断され、AMPのエラーが起きます。

このことになかなか気づけず長らく放置していました。灯台下暗しでした。

無事に解決できたのでめでたし、めでたし。

サンプル

Googleドライブ

コードは上で紹介したものと同じです。

ニコニコ動画

ニコニコ動画も工夫次第で使えます。

SPA(Gatsby)にニコニコ動画外部プレーヤーを埋め込む
ニコニコ動画の埋め込みにscriptを使うとうまくいかない場合は、それが埋め込もうとするiframeを直接埋め込んで使うといいよという話。

公式のスクリプトはうまく行かないので、そのスクリプトが生成しているiframeのコードを再現して指定することで、うまくいくようになります。

<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
 <iframe style="position: absolute; width: 100%; height: 100%; border: 0;" src="https://embed.nicovideo.jp/watch/sm34905947?oldScript=1&referer=&from=0&allowProgrammaticFullScreen=1" width="640" height="360"></iframe>
</div>

bilibili動画

応用すると中国bilibili動画の埋め込みも出来るようになります。

コードは下記の通りです。

<div style="position: relative; padding-bottom: 65%; height: 0; overflow: hidden;">
 <iframe style="position: absolute; width: 100%; height: 100%; border: 0;" src="//player.bilibili.com/player.html?aid=757338968&bvid=BV1C64y1U7kk&cid=317026167&page=1" width="640" height="360" scrolling="no" framespacing="0" allowfullscreen="true"></iframe>
</div>
シェアする

Techの最新記事

KDE系デスクトップで一部の日本語がなかったので言語パックをビルドしてみた

KDE系デスクトップで一部の日本語がなかったので言語パックをビルドしてみた

Xiaomiのモニターライト(約20ドル)を使ってみたら普通に大満足だったので、Windowsと連携できるようにした話

Xiaomiのモニターライト(約20ドル)を使ってみたら普通に大満足だったので、Windowsと連携できるようにした話

国内版Galaxy S21 (SCG09)にカスタムリカバリTWRPを導入する方法

国内版Galaxy S21 (SCG09)にカスタムリカバリTWRPを導入する方法

【Mi スマートバンド(Mi Band) × VRChat OSC】自分の心拍数をアバターに表示する方法!

【Mi スマートバンド(Mi Band) × VRChat OSC】自分の心拍数をアバターに表示する方法!

AndroidデバイスなしでMi スマートバンド4/5/6 のAuth Keyを取得する方法

AndroidデバイスなしでMi スマートバンド4/5/6 のAuth Keyを取得する方法

Windows 11 をPOCOPHONE F1にインストールしてみた!x86のソフトがスマホで快適動く!

Windows 11 をPOCOPHONE F1にインストールしてみた!x86のソフトがスマホで快適動く!

Techの記事をもっと見る

コメント

OFUSEで応援する OFUSE