Iframe の内外のページで JS がどのように動作するかの概要

Iframe の内外のページで JS がどのように動作するかの概要

iframeの外側のiframeのコンテンツを取得する

方法1

contentWindow と contentDocument の 2 つの API を通じて:

var iframe = document.getElementById("iframe1");
var iwindow = iframe.contentWindow;
var idoc = iwindow.document;
var document = iframe.contentDocument;
console.log("window",iwindow); //iframe のウィンドウ オブジェクトを取得します console.log("document",idoc); //iframe のドキュメントを取得します
console.log("html",idoc.documentElement);//iframe の HTML を取得します

このうち、iframe.contentWindow は iframe のウィンドウ オブジェクトを取得でき、iframe.contentDocument は iframe のドキュメント オブジェクトを取得できます。

方法2

Name 属性と組み合わせて、ウィンドウによって提供されるフレームを通じて取得します。

<iframe src="/index.html" id="ifr1" name="ifr2" スクロール="はい">
  <p>お使いのブラウザは iframe をサポートしていません。</p>
</iframe>
<script type="text/javascript">
    コンソールにログ出力します。
    console.dir(document.getElementById("iframe").contentWindow);
</スクリプト>

iframe 内の iframe 外のコンテンツを取得する

window.parent は、前のレベルのウィンドウ オブジェクトを取得します。それがまだ iframe である場合は、iframe のウィンドウ オブジェクトになります。
window.topはトップレベルコンテナのウィンドウオブジェクト、つまり開いたページのドキュメントを取得します。

iframe内の親ページで定義されたメソッドと変数を呼び出す

ウィンドウの親メソッド。
ウィンドウの親の値。

親ページで iframe 子ページを操作するためのメソッドと変数

window.frames["iframe_Name"].window.childMethod();
window.frames["iframe_Name"].window.childValue;

要約する

Iframe を使用する際に注意すべき点がさらに 2 つあります。

  1. 必ず iframe が読み込まれた後に操作を実行してください。iframe が読み込まれる前に iframe 内のメソッドまたは変数を呼び出すと、エラーが発生します。
  2. iframe が外部ページにリンクしている場合、セキュリティ メカニズムは同じドメイン名での通信方法を使用できません。

iframe の読み込みが完了したかどうかを確認する

iframe.onload = 関数() {
    //やるべきこと
}

異なるドメインの通信

親ページから子ページへのデータの受け渡し

位置オブジェクトのハッシュ値を使用して、通信データを渡します。親ページの iframe の src の後にデータ文字列を追加し、子ページで何らかの方法でここでデータを即座に取得します。

サブページは親ページにデータを渡す

プロキシ iframe が使用されます。プロキシ iframe は子ページに埋め込まれ、親ページと同じドメインにある必要があります。次に、前述の同一ドメイン通信方式の実装原理を最大限に活用して、子ページのデータをプロキシ iframe に渡します。次に、プロキシ iframe とメイン ページは同じドメインにあるため、メイン ページは同じドメイン方式を使用してこれらのデータを取得できます。

Iframe の内外のページで JS がどのように動作するかについては、これで説明は終わりです。Iframe ページで JS がどのように動作するかについての関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • JS で if 判定をスムーズに行う方法
  • JSON.stringify の簡易版の実装とその 6 つの主要機能の詳細な説明
  • JSON.stringify のさまざまな用途のまとめ
  • Vue は PDF ファイルのオンライン プレビューを実装します (pdf.js/iframe/embed を使用)
  • JavaScript JSON.stringify() の使用法の概要
  • JSON.stringify を使用する際に発生する循環参照の問題を解決する方法の詳細な説明
  • json.stringify() と json.parse() の違いと使い方
  • Selenium+BeautifulSoup+jsonはスクリプトタグ内のjsonデータを取得します
  • JavaScript のカンマ式が含まれている場合について

<<:  マークアップ言語 - リスト再び

>>:  MySQL ストアド プロシージャ関連の権限変更の問題

推薦する

Springboot プロジェクトの Docker-compose イメージリリースプロセス分析

導入Docker-Compose プロジェクトは、Docker コンテナ クラスターの迅速なオーケス...

HTMLの基礎知識:ウェブページの基礎知識

HTML は Hypertext Markup Language の略です。これは、実際のプレゼンテ...

メタタグコードを使用して、360 デュアルコアブラウザを互換モードではなく高速モードにデフォルト設定します。

あるウェブサイトでは、ユーザーが WebKit カーネルでページを開くことを期待して、HTML5 と...

CSS チュートリアル: CSS 属性メディア タイプ

スタイルシートの最も重要な機能の 1 つは、ページ、画面、電子シンセサイザーなどの複数のメディアに適...

Linux (Ubuntu 18.04) に vim エディタをインストールする方法

デスクトップ システムをダウンロードするには、Ubuntu の公式 Web サイト (https:/...

Linux で大きなファイルの内容を消去または削除する 5 つの方法

Linux ターミナルでファイルを操作しているときに、Linux コマンドライン エディターでファイ...

Mac で docker と kubectl の自動補完コマンドを追加する方法

kubectl の紹介kubectl は、k8s クラスターを操作するためのコマンドライン ツールで...

Dockerコンテナを閉じずに終了する方法の詳細な説明

Docker コンテナに入った後、コンテナを終了すると、コンテナは Exited 状態に変わります。...

MAC で Mysql5.7.10 のルートパスワードを変更する方法

まず、MySQLをskip-grant-tablesモードで起動します: mysqld --skip...

HTTP 戻りコード一覧(中国語と英語の説明)

httpリターンコードリスト(以下は概要です)詳細な中国語の説明についてはここをクリックしてくださ...

MySQLソートにおけるCASE WHENの使用例

序文以前のプロジェクトでは、SQL の CASE WHEN ソート関数が使用されました。ではブログメ...

Vueはページング機能を実装する

この記事の例では、ページング機能を実装するためのVueの具体的なコードを参考までに共有しています。具...

Linux システムで TCP 接続を作成するプロセスの紹介

目次LinuxでTCPを作成する手順サーバクライアントTCP確立プロセスサンプルコードLinuxでT...

Linux で測位バックグラウンド サービスが時々クラッシュする問題の解決方法

問題の説明最近のバックグラウンドサービスでは、特定の命令の要求データをディスクに保存する新しい機能が...

Ubuntu16.04 インストール mysql5.7.22 グラフィックチュートリアル

VMware12.0+Ubuntu16.04+MySQL5.7.22 インストールチュートリアルの詳...