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 ストアド プロシージャ関連の権限変更の問題

推薦する

WeChatアプレットの下部にあるタブバーがコンテンツをブロックする問題に対処する簡単な方法

WeChatアプレットでタブバーを設定すると、重要なコンテンツがブロックされ、iPhoneXなどの異...

vue-cli 設定では Vuex の完全なプロセスレコードを使用します

目次序文インストールと使用方法モジュラー管理Vuex の状態永続性要約する序文Vue 開発では、ユー...

CSS3 アドバンス LESS で星空アニメーションを実装するサンプルコード

この記事では、星空アニメーションを実現するための高度な CSS3 LESS のサンプルコードを次のよ...

int(3)とint(10)の値の範囲はmysqlで同じですか?

目次質問:答え:現実:知識ポイント結論は:要約する質問: MySQLフィールド、unsigned i...

Dockerコンテナデータボリュームの原理と使用法の分析

コンテナデータボリュームとはデータがコンテナ内にある場合、コンテナを削除するとデータは失われます。例...

MySQL レプリケーションの詳細な説明と簡単な例

MySQL レプリケーションの詳細な説明と簡単な例マスタースレーブレプリケーション技術は、MySQL...

MySQLシリーズ15 MySQL共通設定とパフォーマンスストレステスト

1. 一般的なMySQLの設定以下のすべての構成パラメータは、32G のメモリを搭載したサーバーに基...

JavaScript Three.js でテキストを作成する最初の経験

目次効果テキストの作成を開始するまずフォントローダーを作成するフォントライブラリを読み込むテキストジ...

JavaScriptはeコマースプラットフォームの製品詳細を実装します

この記事では、電子商取引プラットフォームで商品の詳細を表示する一般的な例を紹介します。たとえば、ある...

CSS 表示属性のインラインブロックレイアウト実装の詳細な説明

CSS 表示プロパティ注: !DOCTYPE が指定されている場合、Internet Explore...

Vue 値転送の 12 の方法の概要

目次1. 父から息子へ2. 息子から父へ3. ブラザーコンポーネント通信(バス) 4. ref/re...

Docker を使用してコンテナ内のルート パスワードを変更する方法

1. dockerfileを作成するときにsshパスワードを設定するには、次のコマンドを使用します。...

Linuxのtimeコマンドの使い方の詳しい説明

1. コマンドの紹介時間は、コマンドの実行に費やされた時間や関連するシステム リソース、その他の情報...

フラッシュコンテンツの表示に使用される OBJECT タグと EMBED タグの違いの紹介

1. はじめに:ウェブページにフラッシュ コンテンツを正常に表示したい場合は、ページ上のフラッシュ ...

CSS3プロパティline-clampはテキスト行の使用を制御します

説明: ブロック要素に表示されるテキストの行数を制限します。 -webkit-line-clamp ...