0

トップバーにさまざまなページへのリンクがあるシンプルなサイトがあります。

このようなもの

==============================================
 Index link  |  Page 1  |  Page 2  |  Page 3
==============================================

「サイト」は船上の科学データ システムのユーザー インターフェイスであり、ユーザーは実行したいタスクに応じてさまざまなリンク間を移動することがよくあります。アイデアは、開いているページの数をトップ バーのリンクに制限することです。つまり、1 つのブラウザ セッション内で複数の「ページ 1」または「ページ 2」を開くのではなく、既存のページに移動するだけです。 . これらのページには動的な JQueryUI 情報が含まれており、新しいページを開くと失われます。

既存のページにフォーカスを移したり、まだ表示されていない場合は開いたりできるようにする必要があります。

以下のコードは、呼び出し元のページがフォーカスを必要とするページを開いた場合にうまく機能します。

function launchApplication(l_url, l_windowName)
{
  if ( typeof launchApplication.winRefs == 'undefined' )
  {
     launchApplication.winRefs = {};
  }
  if ( typeof launchApplication.winRefs[l_windowName] == 'undefined' || launchApplication.winRefs[l_windowName].closed )
  {
    launchApplication.winRefs[l_windowName] = window.open(l_url, l_windowName);
  } else {
    launchApplication.winRefs[l_windowName].focus()
  }
}

私の問題は、呼び出し元のページによって生成されなかったページを参照することです。

私はかなりの調査を行いましたが、セキュリティ上の理由により、呼び出し元のページによって生成されていない開いているブラウザー ウィンドウにはアクセスできないようです。

この機能を実装する方法はありますか? すべてのページとブラウザの URL とウィンドウ名が Chrome と Firefox に限定されていることは承知しています。

アドバイスをいただければ幸いです。

4

1 に答える 1

0

警告: ブラウザーでウィンドウを操作しようとすることは、クロスブラウザーで動作させる (そして維持する) のが非常に困難であり、過去に行われたすべての悪質な行為のためです。jQuery UI タブなどを使用して、すべてのコンテンツを 1 つのウィンドウに配置し、そのウィンドウ内でタブを実行することをお勧めします。これにより、いつ何を表示するかを完全かつ明確に制御できます。

しかし、実際の質問に答えてください:

ウィンドウ名がわかっている場合は、ページがウィンドウを開かなかった場合でも、それらのウィンドウにアクセスできます (クロスオリジンの問題がない場合)。

var wnd = window.open("", "windowname");

...新しいウィンドウを開かずに、その名前の既存のウィンドウがある場合は、その名前への参照を提供します。その名前のウィンドウがない場合は、その名前の新しい空白のウィンドウが開きます。

だから私はおそらくそれを使用し、wnd.documentコンテンツがそこにあるかどうかを調べます。そうでない場合は、おそらくウィンドウを開いたばかりなのでwnd.location、次のように正しい URL に設定します。

// Try to get existing window
var wnd = window.open("", "thewindowname");

// Does it have our content?
if (!wnd.document.getElementById("someElementId")) {
    // No, set the location
    wnd.location = "/some/url";
}

// Bring it to the foreground
wnd.focus();

実例| ソース- 例で実行されているカウンターに注意してください。これにより、コンテンツを置き換えずに同じウィンドウをアクティブにしたかどうかがわかります (ウィンドウが既に開いている場合)。

上記window.openは、開くときにウィンドウ名が指定されている場合は (別のページであっても) で開いたウィンドウで動作し、 でリンクを介して開いたウィンドウで動作しますtarget="thewindowname"

これは、Chrome 23、IE8、および IE7 (おそらく IE6) で機能します。Firefox 17、Opera 11、または IE9 では動作しません (おそらく IE10 では動作しません)。したがって、私の以前の警告。:-)

于 2012-12-06T08:23:01.833 に答える