13

私の主な目標は次のとおりです。

私のアプリケーションに移動し、新しいタブでリンクを開き、新しいタブで何かを作成し、イベントを親メインのタブに送信して更新します。

必要なことを正確に実行しない2つのテクニックを学びました。

  1. postMessage - 私が知る限り、タブではなく iframe でのみ機能します
  2. window.opener - 新しいタブではなく新しいウィンドウのみを開く window.open(url) でのみ機能します。

タブを使用して子から親にイベントを渡すにはどうすればよいですか? 親と子の JavaScript コードの具体例を教えていただければ幸いです。クロスドメインで機能するはずです (例: www.mydomain.com と bills.mydomain.com)。

不足しているjQueryソリューションはありますか?

4

3 に答える 3

6

以下は、chrome、firefox、つまり(これ以上のブラウザーはテストしていません)で機能します

3つのドキュメントを想定

  1. ( www.mydomain.com/parent.html )「メイン」ドキュメントとリンクを含むページ
  2. ( bills.mydomain.com/child.html ) リンク先で開くページ
  3. ( www.mydomain.com/dispatcher.html )後述

最初に、3 つのドキュメントすべてのドメイン プロパティを mydomain.com に設定します。

<script>
document.domain="mydomain.com";
</script>

parent.html で、「hiddenframe」などの name-property を持つ非表示の iframe を作成します。また、後で応答を受け取る可能性のある関数を作成します。

parent.html は次のようになります。

<script>
document.domain="mydomain.com";
function fx(msg)//receives the response
{
  alert(msg)
}
</script>
<iframe name="hiddenframe" style="display:none"></iframe>
<a href="http://bills.mydomain.com/child.html" target="_blank">click</a>

child.html では、parent.html 内の非表示の iframe にドキュメントをロードできるようになりました。

<script>
document.domain="mydomain.com";
window.open('http://www.mydomain.com/dispatcher.html','hiddenframe');
</script>

(ここでの使用に直面しても混乱しないでくださいwindow.open()。新しいウィンドウは開きません。ページはparent.htmlのiframeにロードされます)


dispatcher.html では、parent.html 内の関数を呼び出すことができます

<script>
document.domain="mydomain.com";
parent.fx('you just got some response');
</script>

parent.html をリロードするだけでよい場合は、少し簡単です。

再度、parent.html と child.html に document.domain-property を設定します (parent.html と dispatcher.html に iframe は必要ありません)。

parent.html では、ウィンドウの name-property も設定します。

<script>
  window.name="parentTab";
</script>

child.html でparentTab-window(tab)にアクセスできるようになりました

<script>
    document.domain="mydomain.com";
    window.open('http://www.mydomain.com/parent.html','parentTab');
</script>

...または単に「parentTarget」を、child.html のリンクまたはフォームのターゲット プロパティとして使用します。

于 2012-11-11T19:48:11.670 に答える
0

同様の質問window.openが(使用したくない)のみについて話していることを確認することで、同じドメイン上のすべてのウィンドウを取得する簡単な方法がないことがわかっているため、必要なことを行うには、おそらく独自のフレームワークを作成する必要がありますこれを使ってwindow.sessionStorage
ただし、それを使用してサブドメインにアクセスできるとは思いませんし、他のドメインにもアクセスできないことは間違いありません.


を使用したウィンドウ固有のメッセージ パッシングの実用的なアイデアsessionStorage..
URL (GET) で物を渡すことができるので、メッセージを渡す方法は、親にそれ自身の一意の ID を生成させ、parentID子の一意の ID を生成させることchildIDです (これは挿入されます)。をparentID使用している場合はオンクリックとともに URL に<a>、または を気にしない場合は非表示のフィールドに<form method="GET">)、次にsessionStorageのようなキーを使用して親にメッセージを保存すると、parentID.childID.timeStamp親と子の両方に間隔があります。ウィンドウの ID で始まるsessionStorage キー.、次に, (つまり、親が検索するparentID.) が一致した場合、キーと値を新しい変数にコピーし、削除 (再び見つからないように) してから、必要に応じて解析します。

これが少し冗長であることは承知していますが、動作するサンプル コードを記述するよりも、概念として説明する方がはるかに簡単であると思います。

于 2012-11-12T04:37:11.823 に答える
0

私が自分でやったことは、window2からデータベースに変更を送信するためにいくつかのajaxを実装しました。JSON を実装して、データベースから新しいデータを window1 にプルします。

于 2012-11-11T19:11:10.370 に答える