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

サイト運営
スポンサーリンク

やたらと制約が多くて面倒くさい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>
Amazon検索
サイト運営
シェアする
Till0196をフォローする

コメント