ちょっと、そこ!私はウィンドウオープナーのサプライヤーであり、物事の技術的な側面について興味深い質問をすることがよくあります。かなりポップアップする質問の1つは、「Child WindowからウィンドウオープナーのDOMにアクセスできますか?」です。このトピックに飛び込み、何が何であるかを見てみましょう。
まず、DOMが何であるかをすぐに説明しましょう。ドキュメントオブジェクトモデル、または略してDOMは、ツリーのようなものです。これは、Webページ上のすべての要素の構造化された表現です。 JavaScriptはこれらの要素と対話し、スタイル、コンテンツなどを変更できます。さて、ウィンドウオープナーとチャイルドウィンドウについて話すとき、通常、あるWebページが別のWebページが開くシナリオを扱っています。
メインページ(ウィンドウオープナー)にいると想像してください。新しいタブまたはウィンドウ(チャイルドウィンドウ)を開くボタンをクリックします。問題は、チャイルドウィンドウが戻ってメインページのDOMを台無しにすることができるということです。まあ、答えは単純なイエスかノーではありません。
同じ - 起源ポリシー
ここでの大きなルールは同じです - 起源ポリシー。これは、Webブラウザのセキュリティ測定であり、ページが異なる起源がある場合に別のページのDOMにアクセスすることを制限します。起源は、基本的に、プロトコル(HTTPやHTTPSなど)、ドメイン(www.example.comなど)、およびポート番号の組み合わせです。
ウィンドウオープナーとチャイルドウィンドウが同じ起源を持っている場合、物事ははるかに柔軟になります。たとえば、自分のWebサイトから新しいウィンドウを開くと、Child WindowはオープナーウィンドウのDOMにアクセスできます。使用できますwindow.openerJavaScriptのオブジェクトはこれを行います。これが簡単な例です:
//(window.opener){var openerdocument = window.opener.document; //これで、オープナーのドキュメント内の要素にアクセスできますvar seelement = openerdocument.getElementById( 'Some -id'); if(someelement){someelement.style.color = 'red'; }}
ただし、起源が異なる場合、ブラウザはアクセスをブロックします。これは、悪意のあるWebサイトが他のサイトから機密情報を盗むことを防ぐためです。たとえば、e -commerceサイトから3番目のパーティー支払いゲートウェイに子のウィンドウを開くと、支払いゲートウェイのウィンドウはe -commerceサイトのDOMにアクセスできません。
なぜウィンドウオープナーのDOMにアクセスしたいのですか?
ウィンドウオープナーのサプライヤーとして、誰かがこれをやりたいと思うかもしれないいくつかの理由を考えることができます。メインページに製品カタログがあり、ユーザーが製品をクリックすると、より詳細な情報が記載されたチャイルドウィンドウが開きます。子のウィンドウがメインページのDOMを更新して、製品が表示されていることを示すか、「最近表示された」リストに追加することをお勧めします。
別のユースケースは、構成ツールに含まれる可能性があります。子のウィンドウを開いて、ウィンドウオープナー製品を構成します。電動ブラインドスイッチ。ユーザーがChildウィンドウで構成を完了したら、ウィンドウオープナーのDOMへのアクセスを使用して、選択した構成オプションでメインページを更新できます。
クロスの処理 - 原点の状況
クロス - 起源の状況でウィンドウオープナーのDOMにアクセスする必要がある場合、いくつかの回避策があります。 1つのオプションは、Message Postmessage APIを使用することです。これにより、さまざまな起源のWindowsが安全な方法で通信できます。
基本的なアイデアは、1つのウィンドウが別のウィンドウにメッセージを送信できることです。ポストメサージ方法、および受信ウィンドウは、これらのメッセージを使用してこれらのメッセージを聞くことができますwindow.addeventlistener( 'message'、callback)イベント。
これがどのように機能しますか:
//チャイルドウィンドウvarターゲットリギン= 'https://www.example.com'; window.opener.postmessage(「子のウィンドウからのデータ」、ターゲットリギン); //ウィンドウオープナーウィンドウ。AddeventListener( 'message'、function(event){if(event.origin === 'https:// window -domain.com'){console.log( '受信メッセージ:'、event.data);}}});
これにより、DOMに直接アクセスすることなく、2つのウィンドウ間でデータを交換できます。これは、同じオリジンポリシーでブロックされます。
リアル - ウィンドウオープナービジネスの世界の例
ウィンドウオープナービジネスのいくつかの実際の - 世界のシナリオについて話しましょう。さまざまな種類のウィンドウオープナーをリストするメインページがあるとします。45mm電子モーターそして精密機械制限モーター。ユーザーがモーターをクリックして詳細を確認すると、チャイルドウィンドウが開きます。
DOMアクセス(可能であれば)を使用して、その製品のメインページのビューカウントを更新できます。または、子のウィンドウに「カートに追加」ボタンがある場合、アクセスを使用してメインページのカートアイコンを更新できます。


Cross -Originが問題である場合、Postmessage APIを使用できます。たとえば、子のウィンドウは、製品がカートに追加されたというメッセージをメインページに送信できます。メインページでは、カート数を更新して確認メッセージを表示できます。
結論
それで、あなたはチャイルドウィンドウからウィンドウオープナーのDOMにアクセスできますか?同じ - 起源ポリシーに依存します。起源が同じ場合、window.openerDOMにアクセスするオブジェクト。そうでない場合は、Message APIを使用してWindows間で通信する必要があります。
ウィンドウオープナーのサプライヤーとして、これらの概念を理解することで、ウェブサイトでより良いユーザーエクスペリエンスを作成するのに役立ちます。より詳細な製品情報を提供するか、ショッピングプロセスを合理化するかにかかわらず、異なるウィンドウ間で対話できることは大きな違いを生む可能性があります。
高品質のウィンドウオープナー、モーター、スイッチの市場にいて、当社の製品がプロジェクトにどのように適合するかについてもっと知りたい場合は、チャットをしたいと思います。調達の議論を開始するために私たちに連絡してください。そして、あなたのニーズに最適なソリューションを見つけて協力してみましょう。
参照
- MDN Web Docs -SAME -Origin Policy
- mdn web docs -window.postmessage()
- W3Schools -JavaScriptウィンドウオブジェクト
