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

ブログ    

推薦する

MySQLは数百万のシミュレーションデータ操作コードを自動的に挿入します

私はデータベースツールとして Navicat を使用しています。他のものも同様です。 1. Navi...

判定条件を使用してCSSファイルをインポートする

解決策 1: HEAD に次のコードを挿入するなど、HTML ドキュメントで条件付きインポートを使用...

Windows 10 で MySQL を完全に削除してアンインストールする方法

序文この記事では、Windows 10 システムで MySQL を完全に削除してアンインストールする...

MySQL 分離レベル操作プロセスの詳細説明 (cmd)

コミットされていない読み取りの例の操作プロセス - コミットされていない読み取り1. 2 つの My...

CSS リスト モデルでのマーカー タグの使用

この記事では主に、 list-itemの下にある::master疑似要素、 list-style-i...

RPM パッケージを使用して MySQL 5.7.18 をインストールするチュートリアル

システム:セントOS7 RPM パッケージ: mysql-コミュニティクライアント-5.7.18-1...

Docker コンテナを他のサーバーに移行する 5 つの方法

多くの場合、移行は避けられません。ハードウェアのアップグレード、データ センターの変更、古いオペレー...

docker compose を使ってワンクリックで分散構成センター Apollo を展開するプロセスの詳細な説明

導入分散について話すときは、分散構成センター、分散ログ、分散リンク トラッキングなどについて考える必...

CentOS7.6にMYSQL8.0をインストールする詳細な手順

1. 一般的に、CentOS では mariadb がデフォルトでインストールされているため、まず ...

Vueはvue-quill-editorリッチテキストエディタを使用し、画像をサーバーにアップロードします。

目次1. 準備2. グローバルコンポーネント quill-editor を定義する1. テンプレート...

Alibaba Cloud イメージリポジトリの Docker 構成変更の実装

docker リポジトリ自体は非常に遅いですが、中国の Alibaba Cloud ミラー リポジト...

ElementUI コンポーネント el-dropdown (落とし穴)

選択して変更: クリックすると現在の値が表示され、ページ UI が表示され、CSS スタイルが変更さ...

Tomcat マルチレイヤーコンテナの設計に関する簡単な説明

目次コンテナ階層サーブレットの検索を要求するプロセス仕組みTomcat のコンテナは Servlet...