【JavaScript】外部からiframe内のスクロール位置を操作する方法

Webページにiframeを埋め込む際、場合によってはiframe内のコンテンツのスクロール位置を外部から制御したいことがあります。本記事では、JavaScriptを使用して、iframe外部からiframe内部のスクロール位置を変更する方法を解説します。

iframeにIDを付ける

まず、対象となるiframeに固有のIDを付けます。これにより、JavaScriptから簡単にiframe要素を取得できるようになります。

<iframe id="myIframe" src="page.html"></iframe>

iframe内のドキュメントにアクセスする

JavaScriptを使用してiframe内のコンテンツにアクセスし、スクロール位置を変更します。具体的には、contentWindow.documentを使用してiframe内のドキュメントを取得し、scrollTopプロパティを操作します。

function scrollToPosition() {
    // iframeのIDを使ってiframe要素を取得
    var iframe = document.getElementById('myIframe');
    
    // iframeのコンテンツにアクセス
    var iframeDocument = iframe.contentWindow.document;
    
    // スクロール位置を設定 (100pxの位置にスクロール)
    iframeDocument.documentElement.scrollTop = 100;
    // またはbody要素に対して設定 (ブラウザによる)
    iframeDocument.body.scrollTop = 100;
}

この例では、scrollTopプロパティを使用して、iframe内の垂直スクロール位置を100pxに設定しています。

スクロール操作をトリガーするイベントハンドラーの追加

ボタンをクリックした際にiframeのスクロール位置を変更するためのイベントハンドラーを追加することも可能です。

<button onclick="scrollToPosition()">Scroll iFrame</button>

このボタンをクリックすると、iframe内のコンテンツが指定の位置までスクロールされます。

サンプル

注意点 同一オリジンポリシーの確認

iframeのコンテンツが同一オリジンポリシーに従って、同じドメインから提供されている必要があります。異なるドメインの場合、セキュリティ制限によりアクセスが制限され、スクロール操作ができない場合があります。この点には注意してください。

コンテンツの読み込みタイミングに注意

iframe内のコンテンツが動的に読み込まれる場合、スクロール操作を行うタイミングに注意が必要です。コンテンツが完全に読み込まれる前にスクロール操作を行うと、期待通りに動作しないことがあります。この場合、iframeのonloadイベントなどを活用して、適切なタイミングで処理を実行することを推奨します。