0

.data()ここでは、関数からオブジェクト データを格納するために使用しようとしていwindow.openます。しかし、うまくいかないようです。私が得るのはundefined変数dataWinだけです。

を使用して、ウィンドウが開いていないときに新しいウィンドウを開く機能を実現する方法を考えて.focus()いますwindow.openwindow.open同じウィンドウ名で使用すると、新しいウィンドウが更新されるため、アプリの問題です。

オブジェクトを変数に格納して、一意の html 要素にバインドできる方法がある場合は?
私は試してみて、ただ得ますundefined

または、WINDOW NAME によってウィンドウが既に開いているかどうかを確認する方法はありますか? (グーグルで検索した後、それを行うことができるものは何も見つかりませんでした)

とにかく、ここに私がやろうとしていることがありますが、運はありません:

function OpenNewWindow_Or_FocusOpenWindow(name) {

dataWin = $("#id-" + name).data('winData')

if (dataWin == 'undefined') { windowClosed = true }
else { windowClosed = dataWin.closed }


  if ( windowClosed == true ) {
    newWin = window.open('myurl' , "win" + name , 'options');
    $("#id-" + name).data('winData',newWin);
    if (newWin != null) { newWin.focus() }
  }
  else {
    dataWin.focus();
  }

}
4

1 に答える 1

2

dataWinnewWinおよびwindowClosedをグローバル変数として使用しています。それらをローカル関数にスコープします。それとは別に、未定義のチェックは間違っています。これはあなたのコードの改訂版で、あなたが望むことをします:

function OpenNewWindow_Or_FocusOpenWindow(name) {
  var el = $("#id-" + name),
      dataWin = el.data('winData'),
      windowClosed,
      newWin;

  windowClosed = (typeof dataWin === 'undefined') ? true : dataWin.closed;

  if (windowClosed) {
    newWin = window.open('myurl' , "win" + name);
    el.data('winData',newWin);

    if (newWin) {
      newWin.focus()
    }
  }
  else {
    dataWin.focus();
  }
}

関数に渡す名前に、実際に「id-NAME」の ID を持つ対応する DOM 要素があることを確認してください。そうしないと、データがどこにも行きません。

心に留めておいてください:たとえば、Google Chrome では、.focus() はポップアップ ウィンドウに対してブロックされます。そのため、.focus() への単純な呼び出しを使用して、目的の機能を実現することはできません。

于 2013-05-11T06:55:32.340 に答える