iframe(スクロールバー無し+クロスドメイン)のページ内リンク

あまり…ほとんど需要が無いと思いますが、以前詰まった
iframeのページ内リンクについて書きます。

あるwebサービスで別途作成したhtmlコンテンツを表示させるためにiframeを使用しました。
その際にhtmlコンテンツでページ内リンクが効かないという問題が発生しました。

iframeにスクロールバーがあれば通常の方法でページ内リンクができるのですが、
1枚のページであるように見せるため、スクロールバーを表示させることはできません。
また、クロスドメインの場合、親子間でオブジェクトの操作ができないようです(XSRF防止のため)

色々試した結果、javascriptのpostMessage(子 – htmlコンテンツ)とaddEventListener(親 – 元のwebサービス)の組み合わせで実現できました。

子から親にpostMessageでスクロール先のY座標を通知

親がaddEventListenerで登録したコールバック先でスクロール処理

kodomo.html(子)

 

oya.html(親)

 

おすすめ記事